1

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

问题是如何实现这一点。第二个问题是哪个性能更好?

4

1 回答 1

5

没有any样式命令,但是如果您使用第@Param一个,然后是列本身中的值,那应该可以...

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

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

你也可以IsNull用来做同样的事情......

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

要回答问题的第二部分,我的感觉是使用单独的语句总是更有效。精简版的代码可能更少,但不一定更容易理解或运行更快。

于 2012-12-11T08:51:55.890 回答