簡體   English   中英

在SQL Server中循環瀏覽日期范圍

[英]Loop through range of dates in SQL Server

我有一個看起來像的存儲過程:

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個,但沒有從中選擇任何東西

您有相當復雜的選擇,看起來就像這樣:

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM