检查存储在XML数据类型列中的集合中是否存在值

ash*_*rya 7 sql t-sql sql-server sql-server-2008 azure-sql-database

我有一个名为"tags"的XML数据类型列.

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

<ArrayOfString>
    <string>personal</string>
    <string>travel</string>
    <string>gadgets</string>
    <string>parenting</string>
</ArrayOfString>
Run Code Online (Sandbox Code Playgroud)

我想选择所有具有我要查找的值的行:例如,我想选择表中具有"travel"标签的所有行.

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

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

但此查询仅在标记"travel"是节点中的第2项时有效.如何检查值是否存在,无论其位置如何?

Mik*_*son 7

select *
from tags
where tags.exist('/ArrayOfString/string[. = "travel"]') = 1
Run Code Online (Sandbox Code Playgroud)

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

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

select *
from tags
where tags.exist('/ArrayOfString/string[. = sql:variable("@Val")]') = 1
Run Code Online (Sandbox Code Playgroud)