0

我在 SSRS 中创建了一个更新工具,可以将假期详细信息写入指定的数据库。这是通过使用插入存储过程作为报表中的数据集创建的。只要我只想指定单个日期,一切正常。理想情况下,虽然我需要得到这个来做一个日期范围。我需要以下列:

HolidayDate|StaffCode|HolidayType|FTE

我知道这最好在.net 或类似的东西中完成,但这有点超出我的技能范围。我需要的是一个多参数存储过程,它将根据在 SSRS 中选择日期范围为每个日期创建一条记录。标准 SSRS 报告会很容易,很简单,BETWEEN @DATE AND @DATE但我想不出办法将其放入我的设置中,我感到很沮丧。

希望我没有太含糊。

4

1 回答 1

0

问题的关键是您确实需要能够获得开始/结束日期之间的日期列表。

保持简单,假设您有报告参数和@StartDate,其值分别为01-Jan-201305-Jan-2013Staff1@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 并不是真正的数据输入机制,但是没有理由说明上述方法在大多数情况下不适用。

于 2013-09-27T12:25:06.213 回答