Нам нужно выполнять ежедневное задание с помощью агента SQL Server (SQL 2000), но мы не хотим, чтобы оно запускалось 22 числа каждого месяца, так как есть другие процессы, которые выполняются только в этот день, и они будут конфликтовать.
Повторяющиеся настройки в Агенте не предоставляют никаких вариантов исключения, есть ли способ добиться этого?
Поместите шаг задания в качестве первого шага в задании, чтобы проверить, является ли DATEPART (dd, getdate ()) = 22 и выдает ли он sp_stopjob, чтобы остановить задание.
Один из способов сделать это - включить проверку даты в запускаемый сценарий, а не запускать его 22-го числа.
Но разве это единственный способ?
Что ж, один вариант похож на вашу существующую идею. Создайте другое задание, которое запускает сценарий для проверки даты. Если это 22-е задание, то ваша ежедневная работа отключается (через SQL). Если это не 22-й, он позволяет вам выполнять повседневную работу.
Единственное преимущество, которое это может иметь по сравнению с вашим предложением, состоит в том, что ваша ежедневная работа будет «чистой» от любой логики даты.
Выполните второе задание 22 числа, которое отключает первое задание:
exec msdb..sp_update_job @job_id = 0xC0923E444828064EA22B46B2C47A1363, @enabled = 0
А затем 23-го снова включите задание:
exec msdb..sp_update_job @job_id = 0xC0923E444828064EA22B46B2C47A1363, @enabled = 1
Я завернул if
заявление по всей моей процедуре
if RIGHT( convert(varchar(11),CURRENT_TIMESTAMP,120),2) = 22 do something else end