我在这里有一个查询,我很好奇是否有更短的编写此查询的方法,这意味着减少查询使用IF
参数来确定它是否应该使用该参数声明。请参阅以下内容:
@Param varchar(10) = NULL
IF @Param IS NOT NULL
BEGIN
SELECT * FROM TABLE WHERE Column = @Param
END
ELSE
BEGIN
SELECT * FROM TABLE
END
这可以简化为一个简单的查询吗?
@Param varchar(10) = NULL
SELECT * FROM TABLE WHERE Column = COALESCE( Any, @Param )
我查看了Coalesce
,但没看到我是否可以使用Any
类功能。我希望这是有道理的。
问题是如何实现这一目标。第二个问题是性能会更好吗?
答案 0 :(得分:5)
没有any
样式命令,但是如果先使用@Param
然后再使用列本身中的值,则应该有效...
SELECT * FROM TABLE WHERE Column = COALESCE(@Param, Column)
如果@Param
为空,则忽略它,并使用列表中的下一项。
您也可以使用IsNull
做同样的事情......
SELECT * FROM TABLE WHERE Column = ISNULL(@Param, Column)
要回答问题的第二部分,我的感觉是使用单独的陈述总是会更有效率。精简版可能代码较少,但不一定易于理解或更快。