我有各种不同的存储过程。我需要一个存储过程来执行另一个存储过程,并仅返回行计数(被调用过程返回的行数),我需要在c#代码中接收它。
最好的方法是什么?
我有各种不同的存储过程。我需要一个存储过程来执行另一个存储过程,并仅返回行计数(被调用过程返回的行数),我需要在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
这是主要的存储过程,我们在其中调用所有其他的存储过程。
DECLARE @RC int
DECLARE @a int
DECLARE @b int
EXECUTE @RC = [dbo].[PawanXX]
@a
,@b OUTPUT
SELECT @RC
同一进程名称的输出 ProcessName 父进程 子进程
ShareDrafts Job12 Job03 ShareDrafts Job13 Job58
(影响了2行)
2
(1行受影响)
@@rowcount
... 但他似乎表明他想以某种方式抑制被调用存储过程返回的结果集。 - Michael Fredrickson