计数行多个exec存储过程

时间:2015-09-29 03:07:17

标签: sql-server stored-procedures

我有调用另一个程序的存储过程 像这样的东西

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

1 个答案:

答案 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参数中的记录号,但即使这样,如果您想要将总记录号作为第一个结果集,则需要将数据存储在中间临时表。