web-dev-qa-db-ja.com

LIKEまたは同様の完全検索操作でXMLを検索する

XML値の列を検索して、に文字列が含まれているかどうかを確認します。スキーマがわかりません。文字列がどこかに含まれているかどうかを知りたいのですが。 XPATHがこの状況で機能するかどうかはわかりません。

同等のもの

_Select s.Name, ts.ValueXML from table t (nolock) 
join table2 ts (nolock) on t.key_Id = ts.key_Id
join table3 s (nolock) on ts.key_Id=s.key_Id
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'
_

エラー:引数データ型xmlは、類似の関数の引数1では無効です。

関連するtsテーブルの列

ValueXml (XML(.), null)

私が探しているアイテムは属性でなければなりません。したがって、上記が不可能な場合は、その属性を含むものは良い代替手段となります。

23
P.Brian.Mackey

最も単純な(ただし、実行が最も高速ではない)方法は、likeに渡す前に列をnvarchar(max)にキャストすることです。

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
50
dasblinkenlight

どうぞ。

SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1

「dasblinkenlight」が提供する解決策として、これは私には問題なく機能し、XMLタグ名も検索しません。

それがどれほどのパフォーマンスであるかはわかりません。

3
user2173353