用于确定是否应该在SQL Server 2012中发生WHERE子句的IF语句

时间:2013-06-17 19:20:48

标签: sql-server

我的情况是表中有一个名为'Type'的列。在类型中,除了null之外,它可以是BA,AB或另外三个组合变量。我只关心BA或AB。

我的问题是在where子句上对此进行过滤,因为在存储过程中,我需要将其转换为通过传递给@Type的内容进行过滤的位置。所以他们可以传递BA,AB或'或者',所以where子句将寻找合适的匹配。 (目前没有where子句,我需要添加它)

如果我这样做,那就是:

WHERE Type = @Type

如果他们传入'BA'或'AB'那将是很好的但是如果他们想要,我将如何处理,包括null (也就是说存储的proc应该像它一直运行一样)。

我想知道是否可以在哪里做一个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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

不可能在"周围放置一个"在哪里,但请考虑:

WHERE type = @type     -- when @type != NULL, match it
   OR @type IS NULL    -- but if @type is NULL, then match everything

对于更复杂的情况,可以使用CASE expression

答案 1 :(得分:1)

这应该有效:

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

答案 2 :(得分:0)

也许这个:

SELECT ...
FROM ...
WHERE (@type IS NULL OR type = @type)
...

如果您将@type作为null传递,则该过程将一如既往地运行。