Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Self Deleting Job  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый день.
Есть необходимость создать джоб который выполниться сразу и удалит себя по выполнению независимо от результата выполнения. Такой себе аналог temporary job в Oracle. Есть несколько трудностей:
1. найпростейший schedule "once time", нужно указать время больше чем текущее время. Не хочется гадать +10 сек или +1 мин, как указать чтоб сразу после commit.
2. @delete_level = 3, но не удаляется после выполнения.

  DECLARE @server_name NVARCHAR(100),
          @database_name NVARCHAR(100),
          @job_id UNIQUEIDENTIFIER,
          @job_name NVARCHAR(100),
          @schedule_name NVARCHAR(100),
          @step_name NVARCHAR(100),
          @active_start_date NVARCHAR(100),
          @active_start_time NVARCHAR(100)

  SET @server_name = @@servername;
  SET @database_name = DB_NAME();
  SET @job_name = CONCAT('JOB.', @job_code); ;
  SET @schedule_name = CONCAT('SCHEDULE.', @job_name);
  SET @step_name = CONCAT('STEP.', @job_name);
  SET @active_start_date = CONVERT(VARCHAR(8), GETDATE(), 112);
  SET @active_start_time = REPLACE(CONVERT(VARCHAR(8), DATEADD(SECOND, 10, GETDATE()), 108), ':', '');

  SELECT @conf_job_log_id,
         @command,
         @active_start_date,
         @active_start_time;

  EXEC msdb.dbo.sp_add_job @job_name = @job_name,
                           @enabled = 1,
                           @delete_level = 3,
                           @owner_login_name = N'sa',
                           @job_id = @job_id OUTPUT;

  EXEC msdb.dbo.sp_add_jobstep @job_id = @job_id,
                               @step_name = @step_name,
                               @subsystem = N'TSQL',
                               @command = @command,
                               @database_name = @database_name;

  EXEC msdb.dbo.sp_add_jobschedule @job_id = @job_id,
                                   @name = @schedule_name,
                                   @enabled = 1,
                                   @freq_type = 1,
                                   @freq_interval = 0,
                                   @active_start_date = @active_start_date,
                                   @active_start_time = @active_start_time,
                                   @active_end_date = @active_end_date,
                                   @active_end_time = @active_end_time;

  EXEC msdb.dbo.sp_add_jobserver @job_id = @job_id,
                                 @server_name = @server_name;
14 ноя 17, 21:42    [20954368]     Ответить | Цитировать Сообщить модератору
 Re: Self Deleting Job  [new]
mezzanine
Member

Откуда:
Сообщений: 157
mezzanine,

2. не актуально, удаляется, уставил дату GETDATE которая естественно не выполнит условия "дата и время больше чем текущее время".
14 ноя 17, 21:48    [20954378]     Ответить | Цитировать Сообщить модератору
 Re: Self Deleting Job  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Уже пробывал и другие типы шедулера, не выполняется джоб с прошедшей датой :(
Можно конечно выполнить sp_start_job, но хотелось бы обойтись стандартной логикой, прошла дата значит выполняй джоб.
14 ноя 17, 23:07    [20954509]     Ответить | Цитировать Сообщить модератору
 Re: Self Deleting Job  [new]
Yasha123
Member

Откуда:
Сообщений: 1833


К сообщению приложен файл. Размер - 19Kb
14 ноя 17, 23:48    [20954551]     Ответить | Цитировать Сообщить модератору
 Re: Self Deleting Job  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
mezzanine
Уже пробывал и другие типы шедулера, не выполняется джоб с прошедшей датой :(
Можно конечно выполнить sp_start_job, но хотелось бы обойтись стандартной логикой, прошла дата значит выполняй джоб.

Это не стандартная логика, а ваши фантазии.
Джоб запускается, когда дата наступила, а не когда прошла.
И в чем нестандартность использования sp_start_job - в упор не пойму. Как раз таки прямой путь для запуска "прямо сейчас". И никакого shedule при этом добавлять не надо.
15 ноя 17, 10:29    [20955000]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить