存储过程中结果集的总数

5
在SQL Server 2008中,是否有办法在存储过程执行后获取被填充的结果集(表)的总数。假设我有一个存储过程,其中内部调用另一个存储过程。我想知道它返回了多少个结果集,即内部调用的存储过程。请有人能帮助我吗?例如:
CREATE PROCEDURE sp_GetReports
(
    @reportName AS VARCHAR(50)
)
AS
BEGIN
    DECLARE @reportProcName AS VARCHAR(50)

    SELECT  @reportProcName = ReportProcName
    FROM ReportMaster
    WHERE ReportName = @reportName;

    EXEC (@reportProcName)

    /*
    * Need to get here, total numbers of Result Sets (tables) retrived.
    */


END
GO

Thanks in advance.


我怀疑这是可能的。为什么你的存储过程会返回多个结果集?这可能不容易被前端应用程序消耗。 - Squirrel
根据报告要求,在动态存储过程中返回了多个结果集。 - Bhavesh Harsora
@BhaveshHarsora:你尝试过使用@@ROWCount吗? - Krishnraj Rana
这与您实际的问题无关,但您应该避免在存储过程中使用sp_前缀。更多详细信息请参见此处 - Bill Tür stands with Ukraine
Thomas,编写的过程名称仅为示例,实际过程名称不同。 - Bhavesh Harsora
显示剩余2条评论
3个回答

1

您可以尝试以下方法:

  • 在存储过程中获取行数,并将结果作为输出参数检索

  • 使用某种类型的外部表格(需要设计)

这样可以得到从存储过程返回的行数。

USE Northwind
GO

CREATE OR ALTER PROCEDURE dbo.Test (
    @rowCnt int OUTPUT
)
AS

SELECT * FROM dbo.Customers
SET @rowCnt = @@ROWCOUNT
GO

DECLARE 
    @rowCount int

EXEC dbo.Test @rowCount OUTPUT

SELECT @rowCount

0

有什么变通方法吗?

在每个报告中创建一些计数器变量。 在执行 SELECT 语句之前,每次增加它。 然后,在存储过程的最后一个输出中将其返回。 每个报告都应遵循此惯例。


-1

你可以通过内部存储过程使用@@ROWCOUNT返回一个输出参数,并在sp_GetReports中使用它。


@@ROWCOUNT返回最后执行的T-SQL所影响的行数,但我需要返回最后一个执行的存储过程中的表格计数。因此,这个@@ROWCOUNT对我在这方面没有帮助。 - Bhavesh Harsora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接