我想用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
时选择数据。
任何有帮助的帮助! 谢谢
答案 0 :(得分:2)
我认为你可以表达这么简单:
WHERE @MyParam = 0
OR (@MyParam BETWEEN 1 AND 5 AND h.MyColumn = @MyParam)
OR (@MyParam = 6 AND h.MyColumn > 6)
答案 1 :(得分: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是&lt; 0或= 6?
2)如果@myParam为空,会发生什么?
注意:您应该阅读Dynamic Search Conditions in T-SQL by Erland Sommarskog
答案 2 :(得分: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