MS SSQL:如何在exec参数

时间:2015-11-10 10:51:37

标签: sql sql-server sql-server-2008 stored-procedures case

使用SQL Server 2008 R2我尝试使用带有两个参数的exec执行存储过程。 第一个参数是唯一标识符。 第二个参数可以是' 2'或者' 3'。

我使用了一个需要唯一标识符的书面函数,如果标识符指向的情况是A类,则返回true(1),如果是B类,则返回false(0) 与VB.Net IIF或C#等价物类似,我考虑使用Case When使用上述函数检索值。

我希望它看起来像这样:

exec spAddCaseToDeletedInso @Case, (select case when dbo.getCaseOwnerByCaseId(@Case) = 1 then '3' else '2' end)

我得到的只是语法错误。

我知道我可以使用以下方法解决此问题:

declare @CaseOwner as char(1) = (select case when dbo.getCaseOwnerByCaseId(@Case) = 1 then '3' else '2' end)
exec spAddCaseToDeletedInso @Case, @CaseOwner

有没有办法使用Case何时在exec行中指定一个值还是我需要使用给定的解决方法?

1 个答案:

答案 0 :(得分:3)

  

我希望它看起来像这样:

exec spAddCaseToDeletedInso @Case, (select case when
dbo.getCaseOwnerByCaseId(@Case) = 1 then '3' else '2' end)

你的假设完全错了。检查 EXECUTE documentation

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

enter image description here

如您所见,您可以传递@parameter

  • @variable
  • 默认

因此,您需要使用变量来保存函数调用的结果并将其传递给存储过程。