我有调用另一个程序的存储过程 像这样的东西
CREATE PROCEDURE [dbo].[TEST_LOOPING]
@ID nvarchar(50) = null
AS
BEGIN
exec proc_1 @ID
exec proc_2 @ID
exec proc_3 @ID
END
我可以从测试循环中获得总行结果吗?并将其显示为最终的附加选择而不是输出
注意:结果显示在第一行? 像这样
Total
275
result for proc_1
result for proc_2
result fro proc_3
答案 0 :(得分:2)
CREATE PROCEDURE [dbo].[TEST_LOOPING]
@ID nvarchar(50) = null
AS
BEGIN
DECLARE @c INT = 0;
exec proc_1 @ID
SET @c += @@ROWCOUNT;
exec proc_2 @ID
SET @c += @@ROWCOUNT;
exec proc_3 @ID
SET @c += @@ROWCOUNT;
SELECT @c AS Total
END
编辑:
我不建议使用它,但有可能:
CREATE PROCEDURE [dbo].[TEST_LOOPING]
@ID nvarchar(50) = null
AS
BEGIN
DECLARE @c INT = 0;
CREATE TABLE #temp1(cols... )
CREATE TABLE #temp3(cols... )
CREATE TABLE #temp3(cols... )
INSERT INTO #temp1(cols ...)
exec proc_1 @ID
SET @c += @@ROWCOUNT;
INSERT INTO #temp2(cols ...)
exec proc_2 @ID
SET @c += @@ROWCOUNT;
INSERT INTO #temp3(cols ...)
exec proc_3 @ID
SET @c += @@ROWCOUNT;
SELECT @c AS Total
SELECT *
FROM #temp1
SELECT *
FROM #temp2
SELECT *
FROM #temp3
END
Gordon Linoff
建议的另一个解决方案是修改每个存储过程以返回OUTPUT
参数中的记录号,但即使这样,如果您想要将总记录号作为第一个结果集,则需要将数据存储在中间临时表。