1

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

我的问题是在 where 子句上过滤它,因为在存储过程中,我需要将它放到将被 @Type 传入的内容过滤的位置。所以他们可以传入 BA、AB 或“任何一个”,因此 where 子句将寻找合适的匹配项。(目前没有where子句,我需要添加它)

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

WHERE Type = @Type

如果他们传入“BA”或“AB”,那将非常有用,但如果他们想要,我将如何处理,包括 null(也就是存储的过程应该像往常一样运行)。

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

有什么想法吗?

4

3 回答 3

1

不可能将 if “周围”放在 where,但请考虑:

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

对于更复杂的情况,可以使用CASE 表达式。

于 2013-06-17T19:24:19.800 回答
1

这应该有效:

WHERE (@Type IN ('AB','BA') AND [Type] = @Type) 
OR @Type IS NULL 
OR @Type NOT IN ('AB','BA')
于 2013-06-17T19:26:31.290 回答
0

也许是这样:

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

如果您通过@typeas null,该过程将一如既往地运行。

于 2013-06-17T19:26:27.183 回答