【问题标题】:SQL Server xml copy values of one node to anotherSQL Server xml将一个节点的值复制到另一个节点
【发布时间】:2010-01-10 22:50:52
【问题描述】:

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

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

生成的 xml 应该是

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

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

感谢任何帮助 谢谢

【问题讨论】:

    标签: sql-server xml


    【解决方案1】:

    你必须小心Silent XQuery failures

    这种情况下的问题是 XPath 表达式 (/Data/Name/text())1 返回一个空序列。 “名称”是一个空元素(它没有子元素)。因此表达式 (/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
    

    【讨论】:

    • 很好的提示。我确实遇到了这个问题,但忘记在帖子中提及。
    • 很高兴你抓住了它。如果您觉得它有用,请不要忘记接受这个答案。
    【解决方案2】:

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

    【讨论】:

    • 您的解决方案有错误。有关更多信息,请参阅我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多