Sql server 用于确定是否应在SQL Server 2012中使用WHERE子句的IF语句

Sql server 用于确定是否应在SQL Server 2012中使用WHERE子句的IF语句,sql-server,Sql Server,我遇到一种情况,表中有一列名为“Type”。在类型中,它可以是BA、AB或除null之外的其他三个组合varchar。我只关心BA或AB 我的问题是在where子句中过滤它,因为在存储过程中,我需要通过@Type传入的内容将其过滤到哪里。所以他们可以通过BA,AB,或者'other',where子句将寻找合适的匹配项(目前没有where子句,我需要添加它) 如果我这样做的话,事情是这样的: WHERE Type = @Type 如果他们传入“BA”或“AB”,这将非常好,但是如果他们想要,我将

我遇到一种情况,表中有一列名为“Type”。在类型中,它可以是BA、AB或除null之外的其他三个组合varchar。我只关心BA或AB

我的问题是在where子句中过滤它,因为在存储过程中,我需要通过@Type传入的内容将其过滤到哪里。所以他们可以通过BA,AB,或者'other',where子句将寻找合适的匹配项(目前没有where子句,我需要添加它)

如果我这样做的话,事情是这样的:

WHERE Type = @Type
如果他们传入“BA”或“AB”,这将非常好,但是如果他们想要,我将如何处理,包括null(也就是说,存储的进程应该像往常一样运行)

我想知道是否有可能在以下位置进行if:

(psuedocode)
IF @type = ' BA' or 'AB' Then WHERE Type = @ Type
ELSE -no where clause is needed, do what the stored proc has always done

有什么想法吗?

不可能在where周围放置if,但要考虑:

WHERE type = @type     -- when @type != NULL, match it
   OR @type IS NULL    -- but if @type is NULL, then match everything
对于更复杂的情况,可以使用。

可能是:

SELECT ...
FROM ...
WHERE (@type IS NULL OR type = @type)
...
如果将
@type
传递为
null
,则该过程将一如既往地运行。

这应该可以:

WHERE (@Type IN ('AB','BA') AND [Type] = @Type) 
OR @Type IS NULL 
OR @Type NOT IN ('AB','BA')

当用户输入“要么”时,您的输入看起来如何?感谢您的提醒,我没有想到它在WHERE中的用法clause@J-曼摩根很乐意帮忙。如果您有任何进一步的问题,请不要忘记标记为答案或评论。=)我只是在等待期限到期:)