从 SQL 存储过程返回工资单日期表
Posted
技术标签:
【中文标题】从 SQL 存储过程返回工资单日期表【英文标题】:Return a Table of Payroll Dates from a SQL Stored Procedure 【发布时间】:2010-10-25 17:34:23 【问题描述】:我正在使用 SQL Server Reporting Services 2008,这对我来说有点新奇,因为我的大部分经验都是在 LAMP 开发方面。此外,将大部分逻辑作为存储过程移至 SQL 是我不太熟悉的事情,但我很想做。任何帮助或指导将不胜感激。
我需要一个表格形式的可接受工资单日期列表,以用作报告参数的允许值。理想情况下,此人将能够从报告参数提供的下拉列表中选择此工资单日期,然后将在数据集中使用该日期从表中提取数据。如果可能,我希望将逻辑存储在 SQL 服务器上,因为这很可能会用于其他一些报告。
创建日期列表的逻辑相当简单。它从系统需要的最早的工资单日期开始(2007 年的某个时间),然后每两周进行一次。该过程或函数应返回一个表,其中包含所有这些日期,包括最近的即将到来的工资单日期。
在我看来,解决这个问题的方法是创建一个临时表,向其中添加日期列表,然后返回该表以便报告参数可以读取它。这是一种可以接受的方式吗?
任何想法、示例或想法将不胜感激。
【问题讨论】:
【参考方案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 美分
【讨论】:
谢谢!我最初的计划是使用开始日期和结束日期,但原来的系统让他们选择一个工资单日期,这就是他们想要坚持的。以上是关于从 SQL 存储过程返回工资单日期表的主要内容,如果未能解决你的问题,请参考以下文章