存储过程中的结果集总数
Posted
技术标签:
【中文标题】存储过程中的结果集总数【英文标题】:Total number of Result Sets in Stored Procedure 【发布时间】:2016-02-26 09:20:15 【问题描述】:在 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
提前致谢。
【问题讨论】:
我怀疑这是可能的。为什么您的存储过程返回多个结果集?它可能不容易被前端应用程序使用。 在动态存储过程中,根据报表要求,返回多个结果集 @BhaveshHarsora:你试过用@@ROWCount
吗?
这与您的实际问题无关,但您应该避免在存储过程中使用 sp_
前缀。有关详细信息,请参阅here。
Thomas,所写的过程名称只是举例,实际过程名称不同。
【参考方案1】:
你也许可以:
获取存储过程中的行数并将结果作为 OUTPUT 参数检索
利用某种类型的外部表(必须设计这个)
这为您提供了从存储过程返回的行数
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
【讨论】:
【参考方案2】:解决方法怎么样?
在每个报告中创建一些计数器变量。 每次在 SELECT 语句之前,递增它。 然后,将其作为 sproc 中的最后一个输出返回。 每个报告都应遵循此约定。
【讨论】:
【参考方案3】:您可以从内部过程返回带有@@ROWCOUNT 的输出参数,并在 sp_GetReports 中使用它。
【讨论】:
@@ROWCOUNT 返回受最后执行的 tsql 影响的行数,我需要最后一个执行的存储过程返回表计数。所以这个@@ROWCOUNT 在这方面对我没有帮助。以上是关于存储过程中的结果集总数的主要内容,如果未能解决你的问题,请参考以下文章
基于Dapper的分页实现,支持筛选,排序,结果集总数,非存储过程
数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集
从 Laravel 4 中的 MSSQL 存储过程读取多个结果集