Dengan asumsi Anda mencoba memfilter ID dalam XML, Anda memiliki masalah dengan sintaks, Anda telah menyediakan simpul root sebagai ActivityId alih-alih Aktivitas, Anda tidak turun ke simpul ID, Anda menyalahgunakan contains
- dan itu mungkin bukan yang Anda inginkan; dan Anda mengabaikan ruang nama.
Ini hanya akan menemukan baris di mana XML memiliki ID tertentu:
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;
Tetapi ExtractValue sudah lama tidak digunakan lagi, jadi Anda harus menggunakan XMLQuery sebagai gantinya. Atau dalam konteks ini mungkin lebih masuk akal untuk menggunakan XMLExists, dengan nilai yang ingin Anda sematkan:
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
);
atau mungkin lebih berguna sebagai argumen:
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"
);
Jika Anda ingin mengekstrak data tertentu dari XML dalam baris yang cocok, lihat XMLQuery atau XMLTable - tetapi itu adalah masalah terpisah.