问题的关键是您确实需要能够获得开始/结束日期之间的日期列表。
保持简单,假设您有报告参数和@StartDate
,其值分别为01-Jan-2013、05-Jan-2013和Staff1。@EndDate
@StaffCode
您的 SP 将具有三个相应的参数 - 基于这些参数,我们可以StaffCode
在 SP 中为该参数构建一个天数列表。
这是一种方法:
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
因此,这将为从to的每个日期插入一行@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 并不是真正的数据输入机制,但是没有理由说明上述方法在大多数情况下不适用。