【问题标题】:How to get row count of select statement inside stored procedure in SQL Server如何在 SQL Server 的存储过程中获取 select 语句的行数
【发布时间】:2018-04-21 06:57:05
【问题描述】:

我有一个要求,我想在存储过程中获取 select 语句的行数,如果行数等于 0,那么只有它会执行下一条语句

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

如果上面的语句返回任何行,那么它将不会继续执行,但如果该语句没有任何行,那么它将执行下一条语句。我用两种方式尝试过它

  1. @@rowcount - 无法正常工作
  2. 通过在表中插入select语句来使用临时表获取表的行数但使用临时表不是优化方式

有什么解决办法吗?

【问题讨论】:

  • 这个问题有什么问题吗?为什么是-1 :(

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


【解决方案1】:

你可以使用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 语句,它可能会返回错误的值be

不。 @@ROWCOUNT:

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

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

【讨论】:

  • 是否有任何解决方案,例如进入变量而无需一次又一次地访问数据库......................................跨度>
  • @@ROWCOUNT 数据库的全局变量,因此如果在同一数据中的其他 sp 中处理任何其他 select 语句,它可能会返回错误值
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多