5

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

最好的方法是什么?

4

2 回答 2

2

假设您使用的是 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;

我昨天大部分时间都在调试一个在插入内调用存储过程时出现的神秘情况。

于 2013-02-06T17:24:50.837 回答
0

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

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 Parent Child 的输出


ShareDrafts Job12 Job03 ShareDrafts Job13 Job58

(2 行受影响)


2

(1 行受影响)

于 2016-12-02T16:41:23.147 回答