我应该怎样做:
如果以下选择有任何行
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
但这样我使用第一次选择两次(一次在检查中,一次是实际的返回记录集。
答案 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()明显慢。