mik*_*sey 6 sql-server stored-procedures reporting-services
我正在尝试创建一个新的SSRS报告,该报告将返回并显示SQL Server存储过程的值.我将一个参数传递@clientID给存储过程.此参数用于3个不同的BEGIN/ END语句.每个BEGIN`END`语句接受参数并进行查询,返回特定数据.
当我创建SSRS报告时,我将数据源指向此存储过程,但仅返回第一个BEGIN/ END语句的结果集.如果我在SSMS中运行存储过程,我会得到3个不同的结果集,如预期的那样.
如何将这些3 BEGIN/ END结果集合并到一个报告中?
示例代码:
CREATE PROCEDURE pClientData (@clientID varchar(30))
AS
DECLARE @Orders table (
...
);
DECLARE @Results table (
...
);
DECLARE @Status table (
...
);
BEGIN
SET NOCOUNT ON;
-- Get all the orders by client
INSERT INTO @Orders
SELECT ...
-- Return the results --
SELECT *
FROM @Orders;
END
BEGIN
SET NOCOUNT ON;
-- Determine the Results
INSERT INTO @Results
SELECT ...
SELECT *
FROM @Results;
END
BEGIN
SET NOCOUNT ON;
SET @Status = (
SELECT ...
);
SELECT @Status as Status;
END
GO
Run Code Online (Sandbox Code Playgroud)
来自SSRS的查询呼叫:
EXEC pClientData @clientID
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是不可能的.
根据应用Microsoft SQL Server 2008 Reporting Services一书
来自Section 4.3.5 - Working with Stored Procedures:
如果存储过程返回多个行集(执行多个
SELECT语句),则报表仅处理第一个行集.如果需要所有结果,请考虑实现一个包装器存储过程,该过程将多个行集合并到临时表中,并使用一个SELECT语句返回所有行.
如建议的那样,您必须对存储过程进行某种调整才能完成此操作.创建一个包装器以在单个集合中返回所有结果,或者将现有存储过程拆分为三个.