我有一个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中声明。我希望运行报告的用户能够选择日期范围,然后将其传递到存储过程。
我可以非常轻松地使用单独的程序执行此操作,但存储过程是一个很多报告将使用的构建块 - 所以不必复制,粘贴或重新键入,我只想调用它。
这可能。
谢谢, 斯科特
答案 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