1

尝试执行以下存储过程时返回错误:

EXECUTE p_someProc
--list of vars
CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var2=1 THEN 2 
     WHEN @var1=1 THEN 1 END,
--more vars

还包括其他 CASE 函数,尽管只出现了一个指向第一个 CASE 的错误。

在 PRINT 函数中运行相同的表达式时,将返回预期结果。

declare @var1 bit set @var1 = 1
declare @var2 bit set @var2 = 1

print(CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var1=1 THEN 2 
     WHEN @var2=1 THEN 1 END)

输出为“3”

我假设我以某种方式滥用了 CASE 功能。谁能想到解决方法或解决方法?

提前致谢。

——斯坦

4

2 回答 2

1

没有更多代码很难说。检查@var1 和@var2 是否已被声明?

确保您也将 CASE 的结果分配给某些东西!

于 2009-12-04T06:44:25.877 回答
1

正如 JeremyMcGee 在上面提到的那样,您需要执行分配而不是尝试将案例传递给 exec,尝试类似以下的操作

Declare @varx int
select @varx = CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var2=1 THEN 2 
     WHEN @var1=1 THEN 1 END
EXECUTE p_someProc @varx
于 2009-12-04T06:52:01.897 回答