我有一个名为“tags”的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”是节点中的第二项时,此查询才有效。如何检查值是否存在,无论其位置如何?
答案 0 :(得分: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
答案 1 :(得分:4)
您可以尝试这样的事情:
SELECT
*
FROM
dbo.Posts
WHERE
tags.exist('/ArrayOfString/string/text()[. = "travel"]') = 1
这将列出XML中其中一个字符串中“travel”的所有行