带参数的 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 过程的主要内容,如果未能解决你的问题,请参考以下文章