Python 3 удалил распаковку параметра кортежа , так что это больше не работает:
lambda (acoustic_data, time_to_failure): acoustic_data
Замените его на что-то вроде:
lambda acoustic_data_and_time_to_failure: acoustic_data_and_time_to_failure[0]
XP_SQLAGENT_ENUM_JOBS
может использоваться, но это недокументированный. Это обычно используется для обнаружения длительных заданий.
Конечно, существует также sp_help_jobs
или просто контролируя таблицы истории задания
Мне действительно приходилось делать это недавно, и вот как я думаю об этом. Я создаю временное задание с помощью процедур sp_add_job и sp_add_jobstep и устанавливаю для @delete_level значение 3 (всегда удаляйте после запуска).
Я не на 100% привержен этому подходу, как вы, вероятно, можете понять по названию хранимой процедуры.Однако это действительно работает:
CREATE PROCEDURE spWorkaround_checkJobExists
@job_id UNIQUEIDENTIFIER
, @thisIteration tinyint
, @maxRecurse tinyint
AS
IF (@thisIteration <= @maxRecurse)
BEGIN
IF EXISTS(
select * FROM msdb.dbo.sysjobs where job_id = @job_id
)
BEGIN
WAITFOR DELAY '00:00:01'
DECLARE @nextIteration int
SET @nextIteration = @thisIteration + 1
EXEC dbo.spWorkaround_checkJobExists @job_id, @nextIteration, @maxRecurse
END
END
Конечно, вы захотите добавить код, чтобы гарантировать, что это будет рекурсивно максимальное количество раз, но вы поняли идею. Вы также можете передать параметр, чтобы контролировать частоту рекурсии. В моем случае через десять секунд результаты бессмысленны.
То, что я здесь делаю, можно изменить для заданий, которые не следует отбрасывать сразу после выполнения, путем изменения критериев выбора для проверки статуса выполнения задания, например, с передачей sp_help_job @job_name или @job_id и @execution_status = 0.