2011-07-25 109 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)