如何获取SQL Server中存储过程内的select语句的行数

时间:2018-04-21 06:57:06

标签: sql sql-server tsql sql-server-2012

我有需要在哪里获取存储过程中select语句的行数,如果行计数等于0则只执行下一个语句

select A, B, C 
from AT 
where B = 1

如果上面的语句返回任何行,那么它将不会进一步执行,但如果此语句没有任何行,那么它将执行下一个语句。我已经尝试过以两种方式使用它

  1. @@rowcount - 它无法正常工作
  2. 通过将select语句插入表获取表的行数来使用临时表,但使用临时表不是优化方式
  3. 有没有解决方案?

1 个答案:

答案 0 :(得分:4)

您可以使用IF NOT EXISTS

IF NOT EXISTS (select A,B,C from AT where B=1) 
BEGIN
   -- sth
END
  

是否有任何解决方案,如进入变量而不是一次又一次地访问数据库

DECLARE @my_rowcount INT;
select A,B,C from AT where B=1;
SET @my_rowcount = @@ROWCOUNT;   -- immediately after select get @@ROWCOUNT

...
IF @my_rowcount = 0 
BEGIN
   -- sth
END

修改

  

@@ ROWCOUNT数据库的全局变量,因此如果在同一数据库中的其他sp中处理任何其他select语句,它可能返回错误的值

不。 @@ROWCOUNT

  

返回受最后一个语句影响的行数。

您可以使用SSMS轻松检查它(打开2个标签,在每个标签上选择1行和2行,然后分别获得@@ ROWCOUNT)。