IN 式を使用して xml 列をクエリしようとしています。このようなクエリを実行するネイティブ XQuery の方法が見つからないため、次の 2 つの回避策を試しました。
次のように、OR の連結として IN クエリを実装します。
WHERE Data.exist('/Document/ParentKTMNode[text() = sql:variable("@Param1368320145") or text() = sql:variable("@Param2043685301") or ...
次のように、String fn:contains(...) メソッドを使用して IN クエリを実装します。
WHERE Data.exist('/Document/Field2[fn:contains(sql:variable("@Param1412022317"), .)]') = 1
指定されたパラメーターは、「|」で区切られた値を持つ (長い) 文字列です。
問題は、バージョン 1. が約 50 を超える引数に対して機能しないことです。サーバーがメモリ不足の例外をスローします。バージョン 2. は動作しますが、非常に遅いです。
3.アイデアはありますか?問題をより完全に表現するには: SQL ネイティブ型の値のリストが与えられた場合、xml 列が xml の特定のフィールドで指定された値の 1 つを持つすべての行を選択します。