En supposant que vous essayez de filtrer sur un ID dans le XML, vous avez un problème de syntaxe, vous avez fourni le nœud racine comme ActivityId au lieu d'Activity, vous ne descendez pas au nœud ID, vous abusez de contains
- et ce n'est probablement pas ce que vous voulez de toute façon ; et vous ignorez les espaces de noms.
Cela ne trouvera que les lignes où le XML a un ID spécifique :
SELECT * from activity
where ExtractValue(xml,
'/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID/text()',
'xmlns="urn:astrazeneca:na:Activity:domain:3" xmlns:ns2="urn:astrazeneca:na:CommonTypes:domain:2"'
) = 10669;
Mais ExtractValue est obsolète depuis longtemps, vous devez donc utiliser XMLQuery à la place. Ou dans ce contexte, il serait probablement plus logique d'utiliser XMLExists, avec la valeur que vous souhaitez intégrer :
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=10669]
'
passing xml
);
ou peut-être plus utilement fourni comme argument :
SELECT * from activity
where XMLExists('
declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=$id]
'
passing xml, 10669 as "id"
);
Si vous souhaitez ensuite extraire des données spécifiques du XML dans les lignes correspondantes, consultez XMLQuery ou XMLTable - mais c'est un problème distinct.