更新XML列-Sql Server

更新XML列-Sql Server,sql,sql-server,xml,sql-server-2008,Sql,Sql Server,Xml,Sql Server 2008,我有一个XML专栏 背景 下面插入不存在但不按顺序排列的元素。也许会有帮助 DECLARE @x1 XML = '<root> <Tag1>true</Tag1> <Tag2> <Tag3> <Tag4>43</Tag4> <Tag4>44</Tag4> <Tag4>46</Tag4> <Tag

我有一个XML专栏 背景


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

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;
 <Tag4>43</Tag4>
 <Tag4>44</Tag4>
 <Tag4>46</Tag4>
 <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;