带参数的SSRS中的Exec Base过程

时间:2014-09-12 17:18:08

标签: sql-server stored-procedures reporting-services parameters

我有一个SSRS报告正在调用一个要执行的存储过程,它会更新数据库中的表。然后,我使用另一个存储过程运行表中数据的报告。

我想要做的是能够将参数从报告传递到存储过程。以下是我正在做的事情的样本。

StoredProcedure
Select 
HospCode
TxnCode
TxnAmt
into
TxnData
From
Data
Where
TxnDate Between @Start and @End

Report- 
Exec StoredProcedure

Select
HospCode
Sum(TxnAmt) Over(Partition By HospCode)
From
TxnData
Order By HospCode

是参数在SP中声明。我希望运行报告的用户能够选择日期范围,然后将其传递到存储过程。

我可以非常轻松地使用单独的程序执行此操作,但存储过程是一个很多报告将使用的构建块 - 所以不必复制,粘贴或重新键入,我只想调用它。

这可能。

谢谢, 斯科特

1 个答案:

答案 0 :(得分:0)

这是逻辑,但如果需要更改,请确保维护存储过程。 在SSRS中,您可以将开始日期和结束日期传递给基本存储过程,该存储过程将传递给子存储过程。

为测试而生成的测试数据..

create table Data (HospCode int, TxnCode int, TxnAmt money, TxnDate date)

insert into Data (HospCode, TxnCode, TxnAmt, TxnDate)
select 1, 1, 10, '2014-09-11'
union all
select 1, 1, 10, '2014-09-12'
union all
select 1, 2, 10, '2014-09-11'
union all
select 2, 2, 10, '2014-09-11'

基本存储过程:您需要创建临时表以从子存储过程返回数据。确保临时表必须具有从子存储过程返回的相同字段和数据类型。

CREATE PROC dbo.someSPbase(@StartDate DATE, @EndDate DATE)
AS
BEGIN

    IF OBJECT_ID('TempDB.dbo.#TempData') IS NOT NULL
        DROP TABLE #TempData;

    CREATE TABLE #TempData(
                HospCode int
                , TxnCode int
                , TxnAmt money
            );

    INSERT INTO #TempData(HospCode, TxnCode, TxnAmt)
    EXEC dbo.someSPSub1 @StartDate, @EndDate


    SELECT HospCode
        , SUM(TxnAmt) OVER (Partition By HospCode) AS TxnAmtTotal
        FROM #TempData;
END

从上面的基本存储过程调用的子存储过程:

    CREATE PROC dbo.someSPSub1(@StartDate DATE, @EndDate DATE)
AS 
BEGIN
        Select 
            HospCode
            ,TxnCode
            ,TxnAmt
            From Data
            Where TxnDate Between @StartDate and @EndDate

END