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

标签 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 个,但您没有从中选择任何内容

您有非常复杂的选择,看起来与此相同:

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 

关于sql-server - 循环遍历 SQL Server 中的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317301/

相关文章:

sql - 创建插入查询(外键约束错误)

javascript - 有效日期作为无效日期 Javascript 的输出

java - 如何在 Java 8 中使用新的 DateTime API 获取区域

r - 日期时间对象到分钟 : I need 3 packages

c# - 如何遍历日期范围?

.net - Azure Server 2008 R2 虚拟机问题 - .Net CAS 策略管理器缓冲区溢出

c# - 如何从数据库中检索非空和非重复数据?

java - com.microsoft.sqlserver.jdbc.SQLServer异常 :incorrect syntax near'='

jquery - FLOT 工具提示放置?

javascript - 以毫秒 (UTC) 为单位获取当前日期(不使用字符串)