循环遍历SQL Server中的日期范围

时间:2015-07-09 12:19:04

标签: sql-server date datetime stored-procedures

我有一个看起来像的存储过程:

CREATE procedure [dbo].[SP_EXEC] 
AS
   DECLARE @DATE AS varchar(50)

   SET @DATE = (SELECT TOP(1) CONVERT(VARCHAR, YEAR(DATEADD(MM, DATEDIFF(MM, '01/01/2000', DATEADD(MM, -1, GETDATE())), '01/01/2000'))) + RIGHT('00'+ CONVERT(VARCHAR, MONTH(DATEADD(MM, DATEDIFF(MM, '01/01/2000', DATEADD(MM, -1, GETDATE())), '01/01/2000'))), 2) + RIGHT('00' + CONVERT(VARCHAR, DAY(DATEADD(MM, DATEDIFF(MM, '01/01/2000', DATEADD(MM, -1, GETDATE())), '01/01/2000'))), 2)
                FROM produit)

    EXEC SP_DELETE_lIGNE_MOIS_EN_COURS  @DATE

存储过程正常,我的目标是执行从2012/03/01到当前日期的一系列日期循环。如何更新我的存储过程以对历史记录进行更新?

1 个答案:

答案 0 :(得分:1)

这里确实没有足够的信息来确定你需要什么...但是最初几点观察:

您从表格中选择了前1名,但您没有从中选择任何内容

你有一个非常复杂的选择,看起来像是这样:

convert(dateadd(month, DATEDIFF(month, 0, getdate()), 0), 112)

这是YYYYMMDD格式的当月第一天

您将其分配给varchar(50) - 并作为参数传递给过程。该程序实际上是使用日期或日期时间吗?

所以,我猜你真的需要这个:

declare @date date

set @date = '20120301'

while (@date < getdate()) begin

    exec SP_DELETE_lIGNE_MOIS_EN_COURS @date

    set @date = dateadd(month, 1, @date)
end