J'ai une table dans une base de données SQL Server 2008 avec une colonne nvarchar (MAX) contenant des données XML. Les données représentent des critères de recherche. Voici à quoi ressemble le XML pour les critères de recherche avec un groupe "OU" de niveau supérieur contenant un seul critère et un groupe "AND" imbriqué à deux critères.Aide sur les requêtes 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>
Compte tenu de l'entrée ensemble de valeurs FieldID, je dois chercher la table pour trouver s'il y a des enregistrements dont les critères de recherche se référer à l'une de ces valeurs (celles-ci sont représentées dans les noeuds « int » sous la "noeuds de FieldIDs")
En exécutant cette requête.
select CAST(OptionalConditions as xml).query('//FieldIDs')
from tblMyTable
je reçois les résultats:
<FieldIDs>
<int>1026</int>
<int>478</int>
</FieldIDs>
<FieldIDs>
<int>1017</int>
</FieldIDs>
<FieldIDs>
<int>1018</int>
</FieldIDs>
(actuellement, il n'y a qu'un seul enregistrement dans la table avec des données XML.)
Mais je ne fais que commencer avec ce genre de choses et je ne sais pas quelle serait la notation pour vérifier l'existence de ces listes de l'un quelconque d'un ensemble arbitraire de FieldID. Je n'ai pas besoin de récupérer des nœuds particuliers, juste vrai ou faux pour savoir si les ID des champs d'entrée sont référencés n'importe où dans la recherche.
Merci pour votre aide!
Edit: en utilisant la solution de Ranon, je l'ai eu de travail en utilisant une requête comme ceci:
SELECT *
FROM myTable
WHERE CAST(OptionalConditions as xml).exist('//FieldIDs/int[.=(1019,111,1018)]') = 1
parfait, qui l'a fait. Merci! –