2

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

这是我的测试数据。实际上,此代码位于表的 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。我已经看到查询可以帮助获得答案,但我真的没有任何工作。

4

1 回答 1

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("") 片段替换为实际值。熟悉这个例子,插入应该是小菜一碟。:) 祝你好运!

于 2013-02-11T02:15:18.343 回答