SQL Select语句检查条件

时间:2012-01-20 12:22:14

标签: sql sql-server

我应该怎样做:

如果以下选择有任何行

SELECT ID, NAME FROM TABLE WHERE ID=@ID

然后返回实际的select,否则使用另一个select语句。

我使用像

这样的东西
IF EXISTS(SELECT ID, NAME FROM TABLE WHERE ID=@ID)
    SELECT ID, NAME FROM TABLE WHERE ID=@ID
ELSE
    SELECT QTY FROM TABLE WHERE ID=@ID

但这样我使用第一次选择两次(一次在检查中,一次是实际的返回记录集。

2 个答案:

答案 0 :(得分:2)

DECLARE @ID INT, 
        @NAME VARCHAR(50);

SELECT @ID = ID, 
       @NAME = NAME 
FROM TABLE WHERE ID=@ID;

IF(@@ROWCOUNT = 1) 
  SELECT @ID AS ID, @NAME AS NAME
ELSE   
  SELECT QTY FROM TABLE WHERE ID=@ID

答案 1 :(得分:2)

它并不像你想象的那么低效。 EXISTS关键字表示优先级在找到1条记录后停止。

但是,如果你真的想避免重复,你可以做点像......

SELECT ID, NAME FROM TABLE WHERE ID=@ID

IF (@@rowcount = 0)
    SELECT QTY FROM TABLE WHERE ID=@ID

这里的问题是您现在最多可以向客户端返回2个记录集。第一个我是空的(但是字段标题等仍然被返回 - 只有0条记录)

您可以通过将结果插入表变量来避免这种情况,并且只有在有任何记录时才将它们返回给客户端。但我认为它会比你现在做的那样只使用EXISTS()明显慢。