web-dev-qa-db-fra.com

Pourquoi est-ce que j'obtiens l'erreur "type non booléen spécifié dans un contexte où une condition est attendue" pour cette demande?

Je reçois cette erreur:
"Error 102 : non-boolean type specified in a context where a condition is expected"
pour cette demande:

DECLARE @num_dossiers TABLE (num_dossier INT,indice NVARCHAR(3))
insert into @num_dossiers
select num_dossier,indice from dossier where num_sec=57

delete from constitue where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers  

La demande déclenchant l'erreur est la dernière:

delete from constitue where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers   

Quelle pourrait être la cause de cette erreur?

6
mounaim

SQL Server ne prend pas en charge une clause IN à plusieurs colonnes (contrairement à Oracle).

delete 
from constitue 
where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers 

Cela peut être réécrit en EXISTS:

DELETE c
FROM constitue c
WHERE EXISTS 
    (SELECT 1 FROM @num_dossiers nd WHERE n.num_dossier = c.num_dossier AND n.indice = c.indice);
15
Mark Sinkinson