0
我有一个存储的proc,它应该基于一个整数来过滤结果,该整数可以是NULL
,我需要能够选择匹配整数或检索所有结果的结果但我无法弄清楚“全部”结果部分的语法。查询基本上是这样的:作为CASE语句中的ELSE子句的值的范围
Select * from dbo.TABLE
WHERE [IDField] =
CASE
WHEN ISNULL(@ID, 0) > 0 THEN @ID
ELSE ?????
END
我想用一个IN
范围,包括所有的值,因为它设置为0
或Null
将返回任何结果,但是这并不工作:
Select * from dbo.TABLE
WHERE [IDField] =
CASE
WHEN ISNULL(@ID, 0) > 0 THEN @ID
ELSE 1 OR 2 OR 3
END
或本:
Select * from dbo.TABLE
WHERE [IDField] IN (
CASE
WHEN ISNULL(@mID, 0) > 0 THEN @mID
ELSE 1,2,3
END
)
您的问题声明不是很清楚,但我想你要像'... WHERE [IDField] = @ID OR 1 = 1' 。 – mustaccio
在WHERE(和ON)子句中使用case _expressions_通常是一个糟糕的主意。代之以坚持和/或。 – jarlh