【问题标题】:Return a Table of Payroll Dates from a SQL Stored Procedure从 SQL 存储过程返回工资单日期表
【发布时间】:2010-10-25 17:34:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql-server datetime stored-procedures stored-functions


    【解决方案1】:

    我会使用类似这样的 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 参数限制它将生成的日期数。

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

    【讨论】:

      【解决方案2】:

      试试这样的:

      ;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 美分

      【讨论】:

      • 谢谢!我最初的计划是使用开始日期和结束日期,但原来的系统让他们选择一个工资单日期,这就是他们想要坚持的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2014-11-06
      相关资源
      最近更新 更多