这里的关键是您确实需要能够获得开始/结束日期之间的日期列表。
保持简单,假设您有报告参数@StartDate、@EndDate 和@StaffCode,其值为01-Jan-2013、05-Jan-2013 和 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 并不是真正的数据输入机制,但没有理由在大多数情况下上述方法不起作用。