您是否可以使用CASE语句来评估要传递到存储过程的参数?

Seb*_*Seb 3 sql stored-procedures sql-server-2008

我有一个存储过程,它有四个参数.我想在另一个脚本中调用它,但是当我这样做时,我还没有确切地知道我想要通过它.我正在尝试内联存储过程.所以我的行看起来像这样:

EXEC stored_procedure 
    @firstparam, 
    @secondparam, 
    CASE @thirdparam 
        WHEN null THEN 0 
        ELSE 1 
    END, 
    CASE @fourthparam 
        WHEN null THEN 0 
        ELSE 1 
    END
Run Code Online (Sandbox Code Playgroud)

但是我在以下部分附近得到了"错误语法"这个非常含糊的错误:

  • 第一个案例
  • 第一个
  • 首先,(在第一个CASE结束之后,在第二个CASE之前)
  • 第二个1

我只是想能够执行一个CASE语句,根据第三和第四个参数传递正确的变量.

Gor*_*off 7

你需要变量.该exec语句不计算参数的表达式:

DECLARE @p3flag int = (CASE WHEN @thirdparam IS NULL THEN 0 ELSE 1 END);
DECLARE @p4flag int = (CASE WHEN @fourthparam IS NULL THEN 0 ELSE 1 END);

EXEC stored_procedure @firstparam, @secondparam, @p3flag, @p4flag;
Run Code Online (Sandbox Code Playgroud)