我在 SQL Server 2008 数据库中有一个表,其中包含一个包含 XML 数据的 nvarchar(MAX) 列。数据代表搜索条件。下面是搜索条件的 XML 的样子,其中一个顶级“OR”组包含一个单一条件和一个嵌套的两个条件“AND”组。
<?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 值的输入,我需要搜索表以查找是否有任何记录的搜索条件引用其中一个值(这些在“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 数据。)
但是我才刚刚开始使用这些东西,我不知道检查这些列表是否存在任意一组 FieldID 的符号是什么。我不需要检索任何特定节点,只需要判断输入字段 ID 是否在搜索中的任何位置引用即可。
谢谢你的帮助!
编辑:使用Ranon的解决方案,我使用这样的查询让它工作:
SELECT *
FROM myTable
WHERE CAST(OptionalConditions as xml).exist('//FieldIDs/int[.=(1019,111,1018)]') = 1