SQL Server 2008データベースに、XMLデータを含むnvarchar(MAX)列を持つテーブルがあります。データは検索条件を表します。これは、1つの単一基準を含む1つのトップレベルの「OR」グループとネストされた2つの基準の「AND」グループを持つ検索条件のXMLの外観です。
<?xml version="1.0" encoding="utf-16"?>
<SearchCriterionGroupArgs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SingleCriteria>
<SearchCriterionSingleArgs>
<Operator>Equals</Operator>
<Value>test</Value>
<FieldIDs>
<int>1026</int>
<int>478</int>
</FieldIDs>
<EntityID>92</EntityID>
</SearchCriterionSingleArgs>
</SingleCriteria>
<GroupCriteria>
<SearchCriterionGroupArgs>
<SingleCriteria>
<SearchCriterionSingleArgs>
<Operator>GreaterThan</Operator>
<Value>2010-01-23</Value>
<FieldIDs>
<int>1017</int>
</FieldIDs>
<EntityID>92</EntityID>
</SearchCriterionSingleArgs>
<SearchCriterionSingleArgs>
<Operator>LessThan</Operator>
<Value>2013-01-23</Value>
<FieldIDs>
<int>1018</int>
</FieldIDs>
<EntityID>92</EntityID>
</SearchCriterionSingleArgs>
</SingleCriteria>
<GroupCriteria />
<EntityID>92</EntityID>
<LogicalOperator>AND</LogicalOperator>
</SearchCriterionGroupArgs>
</GroupCriteria>
<EntityID>92</EntityID>
<LogicalOperator>OR</LogicalOperator>
</SearchCriterionGroupArgs>
FieldID値の入力セットが与えられた場合、テーブルを検索して、検索条件がそれらの値の1つを参照するレコードがあるかどうかを見つける必要があります(これらは「FieldIDs」ノードの下の「int」ノードで表されます)。
このクエリを実行することにより:
select CAST(OptionalConditions as xml).query('//FieldIDs')
from tblMyTable
結果が得られます:
<FieldIDs>
<int>1026</int>
<int>478</int>
</FieldIDs>
<FieldIDs>
<int>1017</int>
</FieldIDs>
<FieldIDs>
<int>1018</int>
</FieldIDs>
(現在、テーブルにはxmlデータを含むレコードが1つだけあります。)
しかし、私はこのようなものを始めたばかりであり、FieldIDの任意のセットの存在についてそれらのリストをチェックするための表記法が何であるかわかりません。特定のノードを取得する必要はありません。入力フィールドIDが検索のどこかで参照されているかどうかについてはtrueまたはfalseだけです。
ご協力いただきありがとうございます!
編集:Ranonのソリューションを使用して、次のようなクエリを使用して動作させました:
SELECT *
FROM myTable
WHERE CAST(OptionalConditions as xml).exist('//FieldIDs/int[.=(1019,111,1018)]') = 1