La prima opzione sarebbe quella di aggiungere un'altra clausola where.
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
Un'altra versione sarebbe quella di utilizzare entrambe le variabili nell'istruzione xquery, contando i risultati.
select *
from @Test
where BasketFruits.value(
'count(distinct-values(/FRUITS/FID[.=(sql:variable("@fruitId1"),sql:variable("@fruitId2"))]))', 'int') = 2
Le due query precedenti funzioneranno perfettamente se sai quanti parametri FID utilizzerai quando scrivi la query. Se ti trovi in una situazione in cui il numero di FID varia, potresti invece utilizzare qualcosa di simile.
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)
Crea la variabile @FIDs come XML per contenere i valori che desideri utilizzare nella query.
Puoi testare l'ultima query qui:https://data .stackexchange.com/stackoverflow/q/101600/divisione-relazionale-con-xquery