来自另一个存储过程的存储过程的行计数

本文关键字:存储过程 另一个 | 更新日期: 2023-09-27 17:57:54

我有各种存储过程。我需要一个存储过程来执行存储过程,然后只返回行计数(被调用过程返回的行数),我需要在c#代码中接收它。

最好的方法是什么?

来自另一个存储过程的存储过程的行计数

假设您使用的是SQL Server(这可能来自代码片段),也许这样的东西对您有用:

exec('exec <your stored procedure goes here>; select @@RowCount')

由于您运行的是SQL Server,我可以想到一个不一定很漂亮的解决方案。

创建一个临时表(如果您有更新版本的SQL Server,则为表变量)。然后执行:

exec(`
declare @t table (
   <columns go here>
);
insert into @t
    exec(''<your exec here>'');
select @rowcount
');

既然我已经说过了,我推荐sp_executesql。这是这样的:

declare @sql nvarchar(max) = N'exec '+@YOURQUERY + '; set @RowCount = @@RowCount';
exec sp_executesql @sql, N'@RowCount int output', @RowCount = RowCount output;

昨天的大部分时间我都在调试一个神秘的条件,当您在插入中调用存储过程时会出现这个条件。

您可以在子存储过程中尝试此操作:

CREATE PROC PawanXX
(
 @a INT
,@b INT OUTPUT
)
AS
BEGIN
SELECT TOP 2 * FROM X
SET @b = @@ROWCOUNT
RETURN @b
END
GO

存储过程,其中我们调用所有其他sps

 DECLARE @RC int
 DECLARE @a int
 DECLARE @b int
EXECUTE @RC = [dbo].[PawanXX] 
   @a
  ,@b OUTPUT
SELECT @RC

相同的输出ProcessName父-子


ShareDrafts Job12 Job03ShareDrafts Job13 Job58

(2行受影响)


2

(1行受影响)