2017-05-16 8 views
1

私はXML列を持つテーブルを持っています。特定の値を持つ子ノードを含むノード内に別のノードを追加するにはどうすればよいですか?たとえば、foo/bar/e/fというノードをbarId 6699からbarId 66989にコピーしたいとします。属性値に基づいてノードを選択する例のみが見つかります。代わりに子ノードの値でフィルタリングする必要があります。特定の子ノードの値を含むXMLノードを変更する方法はありますか?

<foo> 
    <bar> 
     <barId>66988</barId> 
     <name>baz 3</name> 
    </bar> 
    <bar> 
     <barId>66989</barId> 
     <name>b </name> 
     <e> 
      <g> 
       <h> 
        <l>-</l> 
        <m>k</m> 
       </h> 
       <h> 
        <l>p v</l> 
        <m>k</m> 
       </h> 
      </g> 
     </e> 
    </bar> 
    <bar> 
     <barId>6699</barId> 
     <name>n 4 c</name> 
     <e> 
      <f> 
       <h> 
        <i>k</i> 
        <j>9.3</j> 
       </h> 
      </f> 
     </e> 
    </bar> 
</foo> 
+0

は、特定の子ノードの値をノードにアクセスするための例です:http://stackoverflow.com/questions/20864617/tsql-delete-xml-node-if-its-child-element-a-given-value?rq = 1 – jumxozizi

答えて

2

これを試してみてください:

DECLARE @value XML = '<foo><bar><barId>66988</barId><name>baz 3</name></bar><bar><barId>66989</barId><name>b </name><e><g><h><l>-</l><m>k</m></h><h><l>p v</l><m>k</m></h></g></e></bar><bar><barId>6699</barId><name>n 4 c</name><e><f><h><i>k</i><j>9.3</j></h></f></e></bar></foo>'; 

DECLARE @SourceID INT = 6699; 
DECLARE @DestinationID INT = 66989; 

DECLARE @temp XML; 

SELECT @temp = T.c.query('.') 
FROM @value.nodes('/foo/bar[barId = sql:variable("@SourceID")]/e/f') T(c); 

SELECT @temp; 

SET @value.modify('insert sql:variable("@temp") as last into (/foo/bar[barId =sql:variable("@DestinationID")]/e)[1]') 

SELECT @value; 

それはあなたにこれを与える:ここでは

<foo> 
    <bar> 
    <barId>66988</barId> 
    <name>baz 3</name> 
    </bar> 
    <bar> 
    <barId>66989</barId> 
    <name>b </name> 
    <e> 
     <g> 
     <h> 
      <l>-</l> 
      <m>k</m> 
     </h> 
     <h> 
      <l>p v</l> 
      <m>k</m> 
     </h> 
     </g> 
     <f> 
     <h> 
      <i>k</i> 
      <j>9.3</j> 
     </h> 
     </f> 
    </e> 
    </bar> 
    <bar> 
    <barId>6699</barId> 
    <name>n 4 c</name> 
    <e> 
     <f> 
     <h> 
      <i>k</i> 
      <j>9.3</j> 
     </h> 
     </f> 
    </e> 
    </bar> 
</foo> 
関連する問題