-1

我想写一个复杂的SWITCH声明SQL (SQL Server 2008 R2)

目标是在声明中写出这样的内容WHERE

  • 如果myParam = 0,则myColumn = myColumn(0 表示“未定义”,因此我们“忽略”该WHERE语句)
  • 如果0 < myParam < 6,那么myColumn = myParam
  • 如果myParam >= 6,那么myColumn = [6 ; Infinity]

所以我写道:

WHERE 
  h.MyColumn = CASE @MyParam
                 WHEN 0 THEN h.MyColumn
                 WHEN @MyParam > 0 AND @MyParam < 6 THEN @MyParam
                 WHEN @MyParam > 6 THEN /* ??? */

首先,我走得好吗?如果是这样,我该如何写第三个WHEN@MyParam只能等于 0、1、2、3、4、5 或 6,在最后一种情况下,我需要在h.MyColumn > 6.

任何帮助表示赞赏!谢谢

4

3 回答 3

2

我认为您可以更简单地表达这一点:

WHERE @MyParam = 0 
OR (@MyParam BETWEEN 1 AND 5 AND h.MyColumn = @MyParam)
OR (@MyParam = 6 AND h.MyColumn > 6)
于 2013-08-14T21:13:00.347 回答
0

如果您只有一个参数,那么获得所需结果的一种简单方法是使用一个简单的IF ... ELSE ...语句:

IF @myParam=0
BEGIN
    SELECT ...
    FROM ...
    WHERE myColumn=myColumn2 -- ?
-- or
    SELECT ...
    FROM ...
END
ELSE IF 0 < @myParam AND @myParam < 6
BEGIN
    SELECT ...
    FROM ...
    WHERE myColumn=@myParam
END
ELSE IF @myParam > 6
BEGIN
    SELECT ...
    FROM ...
    WHERE myColumn=6
END

问题:

1) 如果@myParam < 0 或 = 6 会发生什么?

2) 如果 @myParam 为 null 会发生什么?

注意:您应该阅读Erland Sommarskog 的 T-SQL 中的动态搜索条件

于 2013-08-14T21:14:57.210 回答
0

我的建议:

if (@myParam = 0)
Begin
    select * from table
    Where h.MyColumn = 0
End
Else if (@myParam between 1 and 5)
Begin
    select * from table
    Where (h.MyColumn between 1 and 5)
End
Else
Begin
    select * from table
    Where (h.MyColumn > 5)
End
于 2013-08-14T21:21:25.997 回答