Назад | Перейти на главную страницу

Задание агента SQL Server - расписание ежедневно, кроме 1 дня в месяц

Нам нужно выполнять ежедневное задание с помощью агента 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