Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
mezzanine Member Откуда: Сообщений: 157 |
mezzanine, 2. не актуально, удаляется, уставил дату GETDATE которая естественно не выполнит условия "дата и время больше чем текущее время". |
14 ноя 17, 21:48 [20954378] Ответить | Цитировать Сообщить модератору |
mezzanine Member Откуда: Сообщений: 157 |
Уже пробывал и другие типы шедулера, не выполняется джоб с прошедшей датой :( Можно конечно выполнить sp_start_job, но хотелось бы обойтись стандартной логикой, прошла дата значит выполняй джоб. |
14 ноя 17, 23:07 [20954509] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
К сообщению приложен файл. Размер - 19Kb |
14 ноя 17, 23:48 [20954551] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Это не стандартная логика, а ваши фантазии. Джоб запускается, когда дата наступила, а не когда прошла. И в чем нестандартность использования sp_start_job - в упор не пойму. Как раз таки прямой путь для запуска "прямо сейчас". И никакого shedule при этом добавлять не надо. |
||
15 ноя 17, 10:29 [20955000] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |