【问题标题】:How to query data in XML column in SQL Server如何在 SQL Server 中查询 XML 列中的数据
【发布时间】:2025-12-31 23:40:02
【问题描述】:

我在xml 列中有这样的数据:

<product>
   <productID>1</productID>
   <productname>tea</productname>
</product>
<product>
   <productID>2</productID>
   <productname>coffee</productname>
</product>

我想将productname 的值更改为green tea,其中productID = 2

我正在使用:

UPDATE [dbo].ProductDocs
SET ProductDoc.modify('replace value of (/Product/ProductName)[2] with "NewName"')

但在这里它总是会改变第二个产品的价值。请告诉我如何使用productID查询。

【问题讨论】:

    标签: c# sql sql-server xml


    【解决方案1】:

    使用谓词表达式按productID 值过滤product 元素,如下所示:

    UPDATE [dbo].ProductDocs
    SET ProductDoc.modify('
        replace value of (/product[productID=2]/productname/text())[1] with "NewName"
    ')
    

    另请注意,如其他答案中所述,XML 和 XPath/XQuery 区分大小写。

    【讨论】:

      【解决方案2】:

      首先,XML 区分大小写,XQuery 表达式也是如此。

      现在你可以这样做了。

      UPDATE [dbo].ProductDocs
      SET ProductDoc.modify('replace value of (/product[productID=2]/productname/text())[1] with "GreenTea"')
      

      【讨论】:

      • 同意区分大小写。但是 XQuery 将触发“语法错误”,因为 /[some_expression] 不是有效的表达式。此外,productID/@Value 引用了productID 元素的value attribute,OP 的 XML 中没有这样的属性。
      • @har07 是的.. 我认为这是一个值,现在修复它。