为什么我收到此请求的错误“在预期条件的上下文中指定的非布尔类型”?

mou*_*aim 6 sql-server-2008 sql-server

我收到此错误:
"Error 102 : non-boolean type specified in a context where a condition is expected"
对于此请求:

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  
Run Code Online (Sandbox Code Playgroud)

触发错误的请求是最后一个:

delete from constitue where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers   
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因可能是什么?

Mar*_*son 15

SQL Server 不支持多列 IN 子句(与 Oracle 不同)。

delete 
from constitue 
where (num_dossier,indice) in select (num_dossier,indice) from @num_dossiers 
Run Code Online (Sandbox Code Playgroud)

这可以重写为 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);
Run Code Online (Sandbox Code Playgroud)

  • 您可以在此处表达对此(目前未计划的)潜在客户的支持:https://feedback.azure.com/forums/908035-sql-server/suggestions/32894992-add-support-for-ansi-standard-row-value-constructo (2认同)