在SQL查询中使用XML DML修改XML节点的值

时间:2014-06-02 16:37:57

标签: sql xml sql-server-2008 dml

我正在尝试使用SQL查询中的XML DML修改XML数据库字段中的节点值。

假设我的表字段有xml,如下所示: -

<ContentTree>
<ContentObject>
      <Id>1</Id>
      <Order>999</Order>
</ContentObject>
<ContentObject >
  <Id>5</Id>
  <Order>999</Order>
</ContentObject>
<ContentObject >
  <Id>3</Id>
  <Order>999</Order>
</ContentObject>
</ContentTree>

有没有办法在SQL查询中使用XML DML来根据Id值修改Order值,例如: 类似的东西: -

If  /ContentTree/ContentObject/Id /text()[1] ="5" 

Then 

Replace value of  /ContentTree/ContentObject/Order/text()[1]
with ("2")

我的实际数据很长,并且计算ContentObjects的索引号并不容易,因此我不想通过其ContentObject索引号来识别特定的Order节点。

非常感谢。

1 个答案:

答案 0 :(得分:0)

以下是我的例子:

DECLARE  @table TABLE (value XML)

INSERT INTO @table
(
    [value]
)
VALUES
(
  N'<ContentTree>
<ContentObject>
      <Id>1</Id>
      <Order>999</Order>
</ContentObject>
<ContentObject>
  <Id>5</Id>
  <Order>999</Order>
</ContentObject>
<ContentObject >
  <Id>3</Id>
  <Order>999</Order>
</ContentObject>
</ContentTree>'
)

UPDATE @table
SET
    [value].modify('replace value of (/ContentTree/ContentObject/Id[text()="5"]/../Order/text())[1] with "5"')

SELECT *
FROM @table t