带参数的 s-s-rS 中的 Exec Base 过程

Posted

技术标签:

【中文标题】带参数的 s-s-rS 中的 Exec Base 过程【英文标题】:Exec Base procedure in s-s-rS with Parameter 【发布时间】:2014-09-12 17:18:07 【问题描述】:

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

我希望能够将参数从报告传递到存储过程。这是我正在做的一个示例。

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】:

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

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

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

【讨论】:

以上是关于带参数的 s-s-rS 中的 Exec Base 过程的主要内容,如果未能解决你的问题,请参考以下文章

在 s-s-rS 报表生成器中选择带参数的前 X 行

s-s-rS 多值参数只返回最后一个值

带参数启动程序

如何覆盖s-s-rS中的参数默认值?

s-s-rS 中的可选多值参数

s-s-rS 单个下拉列表中的多个参数