添加属性和更新值XML列sql server 2008

时间:2012-09-23 18:58:33

标签: sql xml sql-server-2008

我在stackoverflow上看到了几个答案,但我找不到我要找的东西。我已经检查了this questionthis one以及其他一些网页,但无法找到解决方案。

这是我的测试数据。实际上,此代码位于表中的XML列中。

<product id=152>
    <name>tractor</name>
    <category weight=5600 invoice="A600"/>
</product>
<product id=731>
    <name>excavadora</name>
    <category weight=12340 invoice="B300"/>
</product>

我需要的是更新以前的XML做两个动作:

  • 在类别节点上添加新属性
  • 能够更新该新属性值,尝试修改权重但无法做到这一点

我认为解决方案应该在查询中使用.modify和.value关键字,但不知道如何。

我正在使用SQL Server 2008 express。我已经看到一个查询可以帮助我得到一个答案,但我确实没有任何工作。

1 个答案:

答案 0 :(得分:0)

以下是针对您的具体情况的示例。它将ID 152的重量替换为值54321。

DECLARE
    @x xml,
    @ProductID int,
    @CategoryWeight int

SELECT @x = '
    <Product ID="152"> 
        <Category Weight="5600" Invoice="A600" /> 
    </Product>
    <Product ID="731">
        <Category Weight="12340" Invoice="B300" />        
    </Product>'

SELECT
   @ProductID = 152,
   @CategoryWeight = 54321

SET @x.modify('
    replace value of (
        /Product[@ID=sql:variable("@ProductID")]/Category/@Weight
    )[1]
    with sql:variable("@CategoryWeight")
')

SELECT @x

请注意,如果需要,可以将sql:variable(“”)部分替换为实际值。熟悉这个例子,插入应该是一块蛋糕。祝你好运!