【问题标题】:Updating XML column - Sql Server更新 XML 列 - Sql Server
【发布时间】:2014-07-22 01:54:47
【问题描述】:

我有一个 XML 列
设置


<root>
  <Tag1>true</Tag1>
  <Tag2>
    <Tag3>
      <Tag4>43</Tag4>
      <Tag4>44</Tag4>
      <Tag4>46</Tag4>
      <Tag4>50</Tag4>
      <Tag4>89</Tag4>
      <Tag4>99</Tag4>
      <Tag4>166</Tag4>
    </Tag3>
  </Tag2>
</root>

我实际上需要更新上面的列以将下面的子分支插入到 Tag3 分支中,前提是它们不存在于列中并且 Tag1 为 true

 <Tag4>43</Tag4>
 <Tag4>44</Tag4>
 <Tag4>46</Tag4>
 <Tag4>165</Tag4>

我有这个来选择 Tag1 为 true 的位置,但有点混淆了更新 Tag3 分支并插入 Tag4 子分支,前提是它们不存在于 Tag3 中。
SELECT * from table WHERE Setting.exist('//Tag1[text() = "true"]') = 1

在我上面的示例中,我只想将&lt;Tag4&gt;165&lt;/Tag4&gt; 插入列中,最终输出应该是这样的。非常感谢任何帮助!

<root>
  <Tag1>true</Tag1>
  <Tag2>
    <Tag3>
      <Tag4>43</Tag4>
      <Tag4>44</Tag4>
      <Tag4>46</Tag4>
      <Tag4>50</Tag4>
      <Tag4>89</Tag4>
      <Tag4>99</Tag4>
      <Tag4>165</Tag4>
      <Tag4>166</Tag4>
    </Tag3>
  </Tag2>
</root>

【问题讨论】:

    标签: sql sql-server xml sql-server-2008


    【解决方案1】:

    下面插入不存在的元素,但不按顺序插入。也许会有所帮助。

    DECLARE @x1 XML = 
    '<root>
      <Tag1>true</Tag1>
      <Tag2>
        <Tag3>
          <Tag4>43</Tag4>
          <Tag4>44</Tag4>
          <Tag4>46</Tag4>
          <Tag4>50</Tag4>
          <Tag4>89</Tag4>
          <Tag4>99</Tag4>
          <Tag4>166</Tag4>
        </Tag3>
      </Tag2>
    </root>'
    , @x2 XML = 
    '<Tag4>43</Tag4>
     <Tag4>44</Tag4>
     <Tag4>46</Tag4>
     <Tag4>165</Tag4>';
    
    DECLARE @x3 XML = (
        SELECT  * 
        FROM (
            SELECT  s.n.value('.','int') FROM @x2.nodes('*') AS s(n)
            EXCEPT
            SELECT  f.n.value('.','int') 
            FROM    @x1.nodes('/root/Tag2/Tag3/Tag4') AS f(n)
        ) AS Tag4Values (Tag4)
        FOR XML PATH (''));
    
    SET @x1.modify('insert sql:variable("@x3") into (/root/Tag2/Tag3)[1]');
    
    SELECT @x1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 2013-05-07
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      相关资源
      最近更新 更多