【发布时间】:2017-03-31 21:15:17
【问题描述】:
此代码在 Microsoft SQL Server Management Studio 2008 中作为 SQL 查询运行时有效,但在设置为作业步骤时仅适用于第二个条件(更新时不是一个月的最后一天)。这段代码有什么问题?
--set next invoice date
declare @data nvarchar(10) --invoice date
set @data = CONVERT (date, GETDATE());
update table
set invoice_date = case when day(DATEADD(day,1,@data)) = 1 then --is last day of month
(SELECT convert(date,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))) -- set inovice date as last day of next month
else --is not last day of month
(select DATEADD(MM,1,@data)) --add one month to inovice date
end
where status = 'current' and invoice_date = @data -- only for current inovices
【问题讨论】:
-
您在什么时间运行 SQL 作业?
-
作业发生在每天 23:00:00。
-
(SELECT convert(date,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))) -- 将 inovice 日期设置为最后下个月的一天。在这段代码中,您提到下个月的最后一天。但它需要当月的最后一天。
-
@GuruprakashC 非常感谢! Scenerio 是:在 2016 年 9 月 30 日作业运行脚本。脚本设置当前月末日期(脚本应该设置下个月末但没有)。在 2016 年 10 月 1 日,用户输入了错误的日期(2016 年 9 月 30 日),因此他从 Management Studio 运行脚本并再次设置当前月末日期(2016 年 10 月 31 日)的脚本。
标签: sql sql-server-2008 date jobs