【发布时间】:2016-12-03 03:04:28
【问题描述】:
我知道这是一个基本问题,但我似乎无法想出正确的搜索词组合来获得我需要的答案。
我正在处理一个存储过程,其中有一个名为@AccountTypeId 的参数。参数可以是1、2、3或-1。如果@AccountTypeId 是-1,它应该返回所有 帐户类型(1、2 和3)。我可以很容易地编写一个 SP 来根据@AccountTypeId 进行过滤:
CREATE PROCEDURE Accounts_SP (@AccountTypeId INT)
AS
SELECT *
FROM Accounts
WHERE AccountTypeId = @AccountTypeId
问题是当@AccountTypeId 是-1 时,SP 返回所有AccountTypes。
我尝试在 WHERE 子句中使用 CASE 语句,如下所示:
CREATE PROCEDURE Accounts_SP (@AccountTypeId INT)
AS
SELECT *
FROM Accounts
WHERE AccountTypeId IN (CASE @AccountTypeId WHEN -1
THEN (SELECT AccountTypeId FROM AccountTypes)
ELSE @AccountTypeId
END)
但它给了我以下错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我确信有一种简单的方法可以获取所有记录,但我只是让事情变得过于复杂。有人可以指出我正确的方向吗?
【问题讨论】:
标签: tsql stored-procedures parameters