簡體   English   中英

更新XML列-SQL Server

[英]Updating XML column - Sql Server

我有一個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子分支(僅在Tag3中不存在它們的情況下)更新Tag3分支時有些困惑。
SELECT * from table WHERE Setting.exist('//Tag1[text() = "true"]') = 1

在上面的示例中,我只希望將<Tag4>165</Tag4>插入列中,並且最終輸出應該是這樣的。 任何幫助是極大的贊賞!!

<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>

下面插入了不存在但不按順序排列的元素。 也許會有所幫助。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM