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>这将更新节点不存在的所有行<person>,并插入<lastname>Smith</lastname>到这些 XML 值中。

更新:如果您想选择某些名称,请使用此查询:

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>

作为输出;选择标准是对具有值的XML 元素进行测试 <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]')

高温高压

于 2011-03-17T11:34:06.920 回答