Supondo que você esteja tentando filtrar um ID dentro do XML, você tem um problema com a sintaxe, você forneceu o nó raiz como ActivityId em vez de Activity, você não está indo para o nó ID, você está usando incorretamente
contains
- e isso provavelmente não é o que você quer de qualquer maneira; e você está ignorando os namespaces. Isso só encontrará linhas em que o XML tenha um ID específico:
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;
Mas ExtractValue está obsoleto há muito tempo, então você deve usar XMLQuery. Ou, neste contexto, provavelmente faria mais sentido usar XMLExists, com o valor que você deseja incorporar:
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 talvez mais útil fornecido como um argumento:
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"
);
db<>fiddle
Se você deseja extrair dados específicos do XML em linhas correspondentes, consulte XMLQuery ou XMLTable - mas isso é um problema separado.