Я устанавливаю триггер AFTER INSERT для запуска задания SSA, которое выполняет пакет служб SSIS, чтобы сообщить о файле журнала ETL после завершения процесса.Синтаксис для блока TRY ... CATCH выглядит правильным, но обработка кода ошибки не работает для кода ошибки, когда он обнаруживает, что задание SSA, которое ему предписано запустить, уже запущено.
Триггер для пользователятаблица в экземпляре SQL Server 2012 SP4 (с совместимостью с SQL 2012 (110)).Я попытался обработать одну ошибку (# 22022) для задания SQL, уже запущенного, но кажется, что вы не можете перехватить ошибку при выполнении системной хранимой процедуры.
CREATE TRIGGER InterfaceSupport.trg_XMLTrigger_Insert
ON [InterfaceSupport].[XMLLogReaderTriggers]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
EXEC msdb.dbo.sp_start_job 'Launch job'
END TRY
BEGIN CATCH
IF ERROR_NUMBER()=22022 --Job already running
EXEC msdb.dbo.sp_send_dbmail NULL,'name@domain.org',NULL,NULL,'Interface XML Log Reader Already Running','The SSA Job reading Interface logs is already running. The job will attempt to catch the new request at the end of the current cycle.'
ELSE
BEGIN
DECLARE @Errormsg nvarchar(max)
SELECT @Errormsg=ERROR_MESSAGE()
EXEC msdb.dbo.sp_send_dbmail NULL,'name@domain.org',NULL,NULL,'Interface XML Log Reader Spawn Error',@Errormsg
END
END CATCH
END
GO
Я получаю следующую ошибкунесмотря на блок обработки ошибок.Это как если бы блок CATCH не существовал.
Msg 22022, LeveSQLServerAgent Error: Request to run job Launch Job (from User xxx) refused because the job is already running from a request by User xxx. l 16, State 1, Line 17