2012-04-23 35 views
7

我有一個名爲「tags」的XML數據類型列。檢查存儲在XML數據類型列中的集合中是否存在值

在這方面,我存儲的集合,像這樣:

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

我要選擇所有的行,那有我要找的值之一:例如,我要選擇表中有標籤「旅行」的所有行。

我知道這個作品,如果我知道我要尋找的值的索引:

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

但這個查詢只能如果標籤「旅行」是在節點的第二項。我如何檢查一個值是否存在,而不管它在哪個位置?

回答

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 
4

你可以嘗試這樣的事情:

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

這將列出所有具有「旅行」中的一個字符串在XML中的行

相關問題