在Where语句中使用Coalesce

时间:2012-12-11 08:49:43

标签: sql sql-server sql-server-2008 tsql

我在这里有一个查询,我很好奇是否有更短的编写此查询的方法,这意味着减少查询使用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类功能。我希望这是有道理的。

问题是如何实现这一目标。第二个问题是性能会更好吗?

1 个答案:

答案 0 :(得分:5)

没有any样式命令,但是如果先使用@Param然后再使用列本身中的值,则应该有效...

SELECT * FROM TABLE WHERE Column = COALESCE(@Param, Column)

如果@Param为空,则忽略它,并使用列表中的下一项。

您也可以使用IsNull做同样的事情......

SELECT * FROM TABLE WHERE Column = ISNULL(@Param, Column)

要回答问题的第二部分,我的感觉是使用单独的陈述总是会更有效率。精简版可能代码较少,但不一定易于理解或更快。