我的情况是表中有一个名为'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
有什么想法吗?
答案 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
传递,则该过程将一如既往地运行。