我已經在包含XML數據的nvarchar(MAX)列的SQL Server 2008數據庫中有一個表。數據代表搜索條件。以下是搜索條件的XML,其中一個頂級「OR」組包含一個單一標準和一個嵌套雙標準「AND」組。SQL 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值的輸入,我需要搜索表,以查找是否有任何記錄其搜索條件指的是那些值中的一個(這些在之下的「INT」節點表示「FieldIDs」 節點)
通過運行此查詢:
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數據)
但是我剛剛開始使用這些東西,我不知道這個表示法是否會檢查這些列表是否存在任意一組FieldID中的任何一個。我不需要檢索任何特定的節點,只需輸入字段ID是否在搜索的任何位置被引用即可。
感謝您的幫助!
編輯:使用Ranon的解決方案,我得到它的工作使用這樣的查詢:
SELECT *
FROM myTable
WHERE CAST(OptionalConditions as xml).exist('//FieldIDs/int[.=(1019,111,1018)]') = 1
完美,這做到了。謝謝! –