1

我正在使用 SQL Server Reporting Services 2008,这对我来说有点新,因为我的大部分经验都是在 LAMP 开发方面。此外,将大部分逻辑作为存储过程转移到 SQL 中是我不太熟悉的事情,但我很想做。任何帮助或方向将不胜感激。

我需要一个表格形式的可接受工资单日期列表,以用作报告参数的允许值。理想情况下,此人将能够从报告参数提供的下拉列表中选择此工资单日期,然后将在数据集中使用该日期从表中提取数据。如果可能的话,我希望将逻辑存储在 SQL 服务器上,因为这很可能会在其他一些报告中使用。

创建日期列表的逻辑相当简单。它从系统需要的最早的工资单日期开始(2007 年的某个时间),然后每两周进行一次。该过程或函数应返回一个表,其中包含所有这些日期,包括最近的即将到来的工资单日期。

在我看来,解决这个问题的方法是创建一个临时表,向其中添加日期列表,然后返回该表以便报告参数可以读取它的过程或函数。这是一种可以接受的方式吗?

任何想法、例子或想法将不胜感激。

4

2 回答 2

2

我会使用类似这样的 CTE:

;WITH PayPeriod AS (
    SELECT @DateIn2007 AS p UNION ALL
    SELECT DATEADD(dd, 14, p) as P FROM PayPeriod WHERE p < GetDate() )
SELECT p FROM PayPeriod
OPTION ( MAXRECURSION 500 )

MAXRECURSION 和/或 where 参数限制它将生成的日期数。

当然,您可以使用一个参数来找出正确的限制以获得正确的最后日期。

于 2010-10-25T17:43:06.593 回答
1

尝试这样的事情:

;with AllDates AS
(
    SELECT CONVERT(datetime,'1/1/2007') AS DateOf
    UNION ALL
    SELECT DateOf+14
        FROM AllDates
    WHERE DateOf<GETDATE()+14
)
SELECT * FROM AllDates
OPTION (MAXRECURSION 500)

你可以把它放在一个视图或函数中。

但是,我建议不要显示这么多值的选择框,为什么不只有两个文本框字段:开始日期结束日期,并将它们默认为合理的值,只是我的 2 美分

于 2010-10-25T17:45:27.453 回答