如何在 SQL Server 中查询 XML 列中的数据
Posted
技术标签:
【中文标题】如何在 SQL Server 中查询 XML 列中的数据【英文标题】:How to query data in XML column in SQL Server 【发布时间】:2016-07-16 11:14:43 【问题描述】:我在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
查询。
【问题讨论】:
【参考方案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 是的.. 我认为这是一个值,现在修复它。以上是关于如何在 SQL Server 中查询 XML 列中的数据的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server XML 列中,如何验证相同的值是不是存在于多行中
如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)