为什么EXEC会报告必须DECLARE SCALAR VARIABLE的错误

use*_*755 5 sql t-sql sql-server

我一直在努力使用下面的脚本,我无法找到更好的方法来做到这一点.
有谁看到这个问题?我正确地声明了变量.为什么失败了?谢谢你的帮助!

DECLARE @var1 as VarChar(50) 
DECLARE @var2 as VarChar(50) 

SET @Var1 = '1, 2, 3, 4, 5'

EXEC('IF (select count(*) from Table1 where Column1 in (' + @Var1 + ')) = 5 
     SET @Var2 = ''True''
ELSE 
     SET @Var2 = ''False''')

SELECT @Var2
Run Code Online (Sandbox Code Playgroud)

错误信息:

必须声明SCALAR VARIABLE @ Var2

Joh*_*Woo 8

sp_executesql如果要从参数中获取值,则需要使用.

要缩短查询,请使用CASE.

DECLARE @var1 as VarChar(50) 
DECLARE @var2 as VarChar(50) 
SET @Var1 = '1, 2, 3, 4, 5'
SET @sqlCommand = 'SELECT @Var = CASE WHEN count(*) = 5 THEN ''TRUE'' ELSE ''FALSE'' END FROM Table1 where Column1 IN (' + @Var1 + ')'
EXECUTE sp_executesql @sqlCommand, N'@Var VARCHAR(5) OUTPUT', @Var=@var2 OUTPUT
SELECT @Var2
Run Code Online (Sandbox Code Playgroud)

如果你想知道所有ID@Var1出现在桌子上,你还需要使用DISTINCT

SET @sqlCommand = 'SELECT @Var = CASE WHEN count(DISTINCT Column1) = 5 THEN ''TRUE'' ELSE ''FALSE'' END FROM Table1 where Column1 IN (' + @Var1 + ')'
Run Code Online (Sandbox Code Playgroud)