私のテーブルには、XML
データを含む列があります。
たとえば、スキーマが次のようになっているとします。
<person>
<id></id>
<name></name>
</person>
問題は、これらのノードの一部に追加のノードがあることです<lastname>
lastname
ここで、この列のすべての要素を更新して、各要素がデフォルト値のノードを持つようにしますsmith
。
私のテーブルには、XML
データを含む列があります。
たとえば、スキーマが次のようになっているとします。
<person>
<id></id>
<name></name>
</person>
問題は、これらのノードの一部に追加のノードがあることです<lastname>
lastname
ここで、この列のすべての要素を更新して、各要素がデフォルト値のノードを持つようにしますsmith
。
次のようなものを試してください。
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
このリンクをチェックしてください:
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