2011-07-25 141 views
0

在我的表中我有col 1 ,col 2 ,col 3col 3存儲了XML。我想根據「名稱」節點更新Name,Signedby,userid,title,status,lastmodified節點。根據SQL Server中的節點值更新XML節點

XML文件:

<SignatureSummary> 
    <SectionList> 
    <Section> 
     <Name>A</Name> 
     <SignedBy></SignedBy> 
     <UserId></UserId> 
     <Title></Title> 
     <Status></Status> 
     <LastModifiedOn></LastModifiedOn> 
    </Section> 
    <Section> 
     <Name>B</Name> 
     <SignedBy /> 
     <UserId /> 
     <Title /> 
     <Status /> 
     <LastModifiedOn /> 
    </Section> 
    </SectionList> 
</SignatureSummary> 
+0

如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線,然後點擊編輯器工具欄上的「代碼示例」按鈕(「{}」)可以很好地進行格式化和語法高亮顯示! –

+0

如果您的表中不存在XML中的名稱,該怎麼辦?如果您只需要返回有效的名稱,則可以使用FOR XML查詢編寫簡單的SELECT語句,該語句將從您的表中獲取數據。如果您需要返回所有數據,則需要處理XML(在這種情況下性能會更差) – Dalex

回答

0

嘗試是這樣的:

SELECT 
    Col1, Col2, 
    Section.value('(Name)[1]', 'VARCHAR(50)') AS 'Name', 
    Section.value('(SignedBy)[1]', 'VARCHAR(50)') AS 'SignedBy', 
    Section.value('(UserId)[1]', 'VARCHAR(50)') AS 'UserId', 
    Section.value('(Title)[1]', 'VARCHAR(50)') AS 'Title', 
    Section.value('(Status)[1]', 'VARCHAR(50)') AS 'Status', 
    Section.value('(LastModifiedOn)[1]', 'DATETIME') AS 'Last Modified On' 
FROM 
    dbo.YourTable 
CROSS APPLY 
    Col3.nodes('/SignatureSummary/SectionList/Section') AS Sig(Section)