【发布时间】:2013-04-02 19:04:00
【问题描述】:
我有一个带有 XML 数据类型列的 DB 表。该列包含如下值:
<NameValuePairCollection>
<NameValuePair Name="Foo" Value="One" />
<NameValuePair Name="Bar" Value="Two" />
<NameValuePair Name="Baz" Value="Three" />
</NameValuePairCollection>
我正在尝试查询 XML 数据类型列的值为 "One" 的所有行,以获取 "Foo"。我无法创建适当的 XQuery 来过滤结果。
我发现了一些相关的 SO 问题,这些问题对我的尝试有所帮助,但我仍然无法让它发挥作用。
How can I query a value in SQL Server XML column
Use a LIKE statment on SQL Server XML Datatype
这是我目前的 SQL:
select *
from MyTable
where [XmlDataColumn].value('((/NameValuePairCollection/NameValuePair)[@Name="Foo"])[@Value]', 'varchar(max)') = 'One'
order by ID desc
这是我现在遇到的错误:
XQuery [MyTable.XmlDataColumn.value()]: Cannot atomize/apply data() on expression that contains type 'NameValuePair' within inferred type 'element(NameValuePair,#anonymous) *'
更新(回应@LeoWörteler 的建议)
根据您的回答,我将 SQL 更改为:
select *
from MyTable with(nolock)
where [XmlDataColumn].value('/NameValuePairCollection/NameValuePair[@Name="Subject"]/@Value', 'varchar(max)') = 'One'
order by ID desc
这仍然不起作用。我收到以下错误:
XQuery [MyTable.XmlDataColumn.value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xs:string *'
【问题讨论】:
标签: sql sql-server xml xquery