Opsi pertama adalah menambahkan klausa where yang lain.
declare @fruitId1 int;
set @fruitId1=1;
declare @fruitId2 int;
set @fruitId2=3;
select *
from @Test
where
BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId1")]')=1 and
BasketFruits.exist('/FRUITS/FID[.=sql:variable("@fruitId2")]')=1
Versi lain adalah menggunakan kedua variabel dalam pernyataan xquery, menghitung klik.
select *
from @Test
where BasketFruits.value(
'count(distinct-values(/FRUITS/FID[.=(sql:variable("@fruitId1"),sql:variable("@fruitId2"))]))', 'int') = 2
Dua kueri di atas akan berfungsi dengan baik jika Anda tahu berapa banyak parameter FID yang akan Anda gunakan saat menulis kueri. Jika Anda berada dalam situasi di mana jumlah FID bervariasi, Anda dapat menggunakan sesuatu seperti ini sebagai gantinya.
declare @FIDs xml = '<FID>1</FID><FID>3</FID>'
;with cteParam(FID) as
(
select T.N.value('.', 'int')
from @FIDs.nodes('FID') as T(N)
)
select T.BasketName
from @Test as T
cross apply T.BasketFruits.nodes('/FRUITS/FID') as F(FID)
inner join cteParam as p
on F.FID.value('.', 'int') = P.FID
group by T.BasketName
having count(T.BasketName) = (select count(*) from cteParam)
Buat variabel @FIDs sebagai XML untuk menampung nilai yang ingin Anda gunakan dalam kueri.
Anda dapat menguji kueri terakhir di sini:https://data .stackexchange.com/stackoverflow/q/101600/relational-division-with-xquery