2016-11-17 4 views
0

Этот код работает при выполнении SQL Query в Microsoft SQL Server Management Studio 2008, но когда он задан как шаг задания, то работает только второе условие (обновление, когда это не последний день месяца). Что не так с этим кодом?Как сделать работу с шагом работы

--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 
+0

В какое время выполняется SQL-задание? –

+0

Работа происходит каждый день в 23:00:00. – mahnamahna

+0

(SELECT convert (date, DATEADD (s, -1, DATEADD (mm, DATEDIFF (m, 0, GETDATE()) + 1,0)))) - установить дату вступления в качестве последнего дня следующего месяца. В этом коде вы упомянули как последний день следующего месяца. но в последний день текущего месяца. –

ответ

0

Попробуйте это. Первое условие будет работать каждый месяц только в последний день.

--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 
         CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@data)+2,0)) AS DATE) -- set inovice date as last day of next month 
        ELSE --is not last day of month 
        (DATEADD(MM,1,@data)) --add one month to inovice date 
         END 
WHERE status = 'current' AND invoice_date = @data -- only for current inovices