sql - 为什么 EXEC 报告 MUST DECLARE SCALAR VARIABLE 错误

标签 sql sql-server tsql

我一直在努力处理下面的脚本,但我找不到更好的方法。
有人看到问题所在吗?我正确地声明了变量。为什么会失败呢?感谢您的帮助!

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

错误消息:

MUST DECLARE SCALAR VARIABLE @Var2

最佳答案

如果您想从参数中获取值,则需要使用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

如果您想知道来自 @Var1 的所有 ID 是否都出现在表格中,您还需要使用 DISTINCT

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

关于sql - 为什么 EXEC 报告 MUST DECLARE SCALAR VARIABLE 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285609/

相关文章:

sql - 是否可以根据参数减去我的表行值,直到它达到零而不循环?

sql - Goland 可以使用其他 SQL 包自动完成 SQL 语句吗?

c# - 我应该如何从 WCF 服务解决方案访问 SQL Server?

sql-server - 使用 Windows 身份验证登录本地 SQL Server 实例

sql - 获取每月第二个星期二的日期

java - MySQL select 与 JDBC 的性能问题

mysql - 使用 MySQL InnoDB 对 JPA 中 TEXT 列的唯一约束

tsql - 为什么 SQL 函数将小数位更改为全零?

sql-server - 使用具有中等数据的表提高 SQL Server 查询性能

tsql - 加入相同数据的多个表并返回所有行