7

我有一个名为“标签”的 XML 数据类型列。

在那里,我正在存储一个集合,如下所示:

<ArrayOfString>
    <string>personal</string>
    <string>travel</string>
    <string>gadgets</string>
    <string>parenting</string>
</ArrayOfString>

我想选择具有我正在寻找的值之一的所有行:例如,我想选择表中具有标签“travel”的所有行。

如果我知道我正在寻找的值的索引,我知道这是可行的:

select * from posts
where tags.value('(/ArrayOfString/string)[1]', 'nvarchar(1000)') = 'travel'

但此查询仅在标签“travel”是节点中的第二项时才有效。如何检查一个值是否存在,而不管它的位置如何?

4

2 回答 2

7
select *
from tags
where tags.exist('/ArrayOfString/string[. = "travel"]') = 1

或者如果你想检查一个变量,就像这样。

declare @Val varchar(10)
set @Val = 'travel'

select *
from tags
where tags.exist('/ArrayOfString/string[. = sql:variable("@Val")]') = 1
于 2012-04-23T07:05:13.803 回答
4

你可以尝试这样的事情:

SELECT
    *
FROM
    dbo.Posts
WHERE
    tags.exist('/ArrayOfString/string/text()[. = "travel"]') = 1

这将列出在您的 XML 中的一个字符串中具有“旅行”的所有行

于 2012-04-23T07:05:26.710 回答