7

「タグ」と呼ばれるXMLデータ型の列があります。

その中で、私は次のようにコレクションを保存しています:

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

探している値の1つを持つすべての行を選択したい。たとえば、「travel」というタグが付いたテーブル内のすべての行を選択したい。

私が探している値のインデックスを知っていれば、これが機能することを知っています:

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

ただし、このクエリは、タグ「travel」がノードの2番目のアイテムである場合にのみ機能します。位置に関係なく、値が存在するかどうかを確認するにはどうすればよいですか?

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の文字列の1つに「travel」が含まれるすべての行が一覧表示されます

于 2012-04-23T07:05:26.710 に答える