我在SSRS中创建了一个更新工具,它将假日详细信息写入指定的数据库。这是通过使用插入存储过程作为报表中的数据集创建的。只要我只想指定单个日期,一切正常。理想情况下,虽然我需要这个做日期范围。我有以下需要的列:
HolidayDate|StaffCode|HolidayType|FTE
我知道这最好用.net或类似的东西完成,但这有点超出我的技能范围。我需要的是一个多参数存储过程,它将根据在SSRS中选择日期范围为每个日期创建记录。标准的SSRS报告很简单,很简单BETWEEN @DATE AND @DATE
但是我无法弄清楚如何将它放入我的设置中并且我感到沮丧。
希望我没有太模糊。
答案 0 :(得分:0)
问题的关键在于你真的需要能够得到开始/结束日期之间的日期列表。
保持简单,假设您有报告参数@StartDate
,@EndDate
和@StaffCode
,其值为 01-Jan-2013 ,分别于2013年1月5日和 Staff1 。
您的SP将有三个相应的参数 - 根据这些参数,我们可以为SP中的StaffCode
建立一个天数列表。
这是一种方法:
create procedure MySP
(
@StartDate date
, @EndDate date
, @StaffCode varchar(10)
) as
with dates as
(
select HolidayDate = @startDate
union all
select HolidayDate = dateadd(dd, 1, HolidayDate)
from dates
where dateadd(dd, 1, HolidayDate) <= @EndDate
)
insert into HolidayDates
select HolidayDate, StaffCode = @StaffCode
from dates;
因此,这会为@StartDate
到@EndDate
的每个日期插入一行。
这只是一个例子,我用一个递归的CTE来设置日期 - 如果你有一个日历或数字表,你可以用它来代替;那里有很多例子。
另一种方法是基于日期参数构建基于循环的集合:
create procedure MySP
(
@StartDate date
, @EndDate date
, @StaffCode varchar(10)
) as
declare @Dates table (HolidayDate date)
while (@StartDate <= @EndDate)
begin
insert into @Dates select @StartDate
select @StartDate = dateadd(dd, 1, @StartDate)
end
insert into HolidayDates
select HolidayDate, StaffCode = @StaffCode
from @Dates;
你自己说过这不是一个理想的工作流程 - SSRS并不是一个真正的数据输入机制,但是在大多数情况下上述原因并不适用。