SQL Server xml将一个节点的值复制到另一个节点

时间:2010-01-10 22:50:52

标签: sql-server xml

我想在sql server(2005和2008)中将一个节点的值复制到另一个节点。 例如,如果其中一个xml数据如下

 <Data>
<Name></Name>
<ShortName>Joe</ShortName>
</Data>

生成的xml应为

<Data>
<Name>Joe</Name>
<ShortName>Joe</ShortName>

update语句应该影响表中的所有行

感谢任何帮助 感谢

2 个答案:

答案 0 :(得分:2)

您必须注意Silent XQuery failures

这种情况下的问题是XPath表达式(/ Data / Name / text())1返回一个空序列。 'Name'是一个空元素(它没有子元素)。因此,表达式(/ Data / Name / text())1不指向任何现有节点。解决此问题的方法是在Name元素中插入一个新的文本节点,如下所示:

DECLARE @myDoc xml
SET @myDoc = '<Data>
    <Name></Name>
    <Name2>dd</Name2>
    <ShortName>Joe</ShortName>
</Data>'

SELECT @myDoc

if (@myDoc.exist('(/Data/Name/text())[1]') = 1) BEGIN
    set @myDoc.modify('
        replace value of (/Data/Name/text())[1]
        with (/Data/ShortName/text())[1]
    ')
end else begin
    set @myDoc.modify('
        insert (/Data/ShortName/text())[1]
        as first into (/Data/Name)[1]
    ')
end

SELECT @myDoc

答案 1 :(得分:0)

得到了解决方案 更新表集col.modify(用/(ShortName / text())替换(/ Name / text())[1]的值[1])