3

私のテーブルには、XMLデータを含む列があります。

たとえば、スキーマが次のようになっているとします。

<person>
  <id></id>
  <name></name>
</person>

問題は、これらのノードの一部に追加のノードがあることです<lastname>

lastnameここで、この列のすべての要素を更新して、各要素がデフォルト値のノードを持つようにしますsmith

4

2 に答える 2

5

次のようなものを試してください。

UPDATE 
    dbo.YourTable
SET 
    XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE 
    XmlColumn.exist('/person/lastname') = 0

<lastname>これにより、ノードが内部に存在しないすべての行が更新され、それらのXML値に<person>挿入されます。<lastname>Smith</lastname>

更新:特定の名前を選択する場合は、次のクエリを使用します。

UPDATE 
    dbo.YourTable
SET 
    XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE 
    XmlColumn.exist('/person[name="John"]') = 1

更新#2:私のクエリが正しいことを証明するために-ここでこの小さなテストを試してください:

DECLARE @test TABLE (ID INT, XmlCol XML)

INSERT INTO @test 
   VALUES(1, '<person><id>1</id><name>John</name></person>'),
         (2, '<person name="John"><id>2</id><name>Fred</name></person>'),
         (3, '<person><id>3</id><name>Wally</name></person>')

SELECT *
FROM @test
WHERE XmlCol.exist('/person[name="John"]') = 1

これを(SQL Server 2008以降で)実行すると、次のようになります。

1    <person><id>1</id><name>John</name></person>

出力として; 選択基準は <name>値がJohn

于 2011-03-17T11:33:49.677 に答える
0

このリンクをチェックしてください:

http://msdn.microsoft.com/en-us/library/ms345117%28SQL.90%29.aspx

そこにあなたはこれを見つけることができます:

UPDATE docs SET xCol.modify('
  insert 
   <section num="2">   
        <title>Background</title>
   </section>
  after (/doc//section[@num=1])[1]')

HTH

于 2011-03-17T11:34:06.920 に答える