2012-04-23 10 views
7

"tags"というXMLデータ型の列があります。その中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' 

をしかし、このクエリはタグ「旅行」のノードに第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 
4

あなたはこのような何かを試すことができます。

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

これはあなたのXML内の文字列の一つに「旅」を持っているすべての行をリスト表示します

関連する問題