TRY / CATCH nie działa na błąd agenta SQL Server?

używamsp_start_job rozpocząć pracę.

Praca (test2) ma tylko jeden krok:

select getdate()
waitfor delay '00:00:10'

TheTRY/CATCH kod:

begin try
    EXEC msdb.dbo.sp_start_job @job_name = 'test2'
end try
begin catch
    print 'error'
end catch

Pierwsze uruchomienie kodu:

Praca „test2” rozpoczęła się pomyślnie.

Drugi przebieg kodu (w ciągu 10 sekund):

Msg 22022, Level 16, State 1, Line 0
Błąd SQLServerAgent: odrzucono żądanie uruchomienia testu zadania2 (z poziomu użytkownika), ponieważ zadanie jest już uruchomione z żądania użytkownika sa.

DlaczegoTRY/CATCH nie działa w tym scenariuszu?

AKTUALIZACJA: Na początku powinienem dodać, że pracuję na serwerze sql 2005, który ma połączone serwery (serwer SQL 2000). Próbowałem napisać proc na serwerze SQL Server 2005, aby zobaczyć zadanie na wszystkich połączonych serwerach. Jeśli zadanie nie działa, uruchom je. Początkowo użyłem try-catch i miałem nadzieję złapać każdy błąd, gdy uruchomiłem już uruchomione zadanie, ale nie powiodło się (ten wątek).

W końcu użyłem następującego kodu: (nie skompiluje się, musisz zastąpić niektóre zmienne, po prostu daje pomysł)

    CREATE TABLE [dbo].[#jobInfo](
        [job_id] [uniqueidentifier] NULL,
        [originating_server] [nvarchar](30) ,
        [name] [nvarchar](128) ,
        [enabled] [tinyint] NULL,
        [description] [nvarchar](512) ,
        [start_step_id] [int] NULL,
        [category] [nvarchar](128) ,
        [owner] [nvarchar](128) ,
        [notify_level_eventlog] [int] NULL,
        [notify_level_email] [int] NULL,
        [notify_level_netsend] [int] NULL,
        [notify_level_page] [int] NULL,
        [notify_email_operator] [nvarchar](128) ,
        [notify_netsend_operator] [nvarchar](128) ,
        [notify_page_operator] [nvarchar](128) ,
        [delete_level] [int] NULL,
        [date_created] [datetime] NULL,
        [date_modified] [datetime] NULL,
        [version_number] [int] NULL,
        [last_run_date] [int] NOT NULL,
        [last_run_time] [int] NOT NULL,
        [last_run_outcome] [int] NOT NULL,
        [next_run_date] [int] NOT NULL,
        [next_run_time] [int] NOT NULL,
        [next_run_schedule_id] [int] NOT NULL,
        [current_execution_status] [int] NOT NULL,
        [current_execution_step] [nvarchar](128) ,
        [current_retry_attempt] [int] NOT NULL,
        [has_step] [int] NULL,
        [has_schedule] [int] NULL,
        [has_target] [int] NULL,
        [type] [int] NOT NULL
    )


    SET @sql = 
    'INSERT INTO #jobInfo
    SELECT * FROM OPENQUERY( [' + @srvName + '],''set fmtonly off exec msdb.dbo.sp_help_job'')'

    EXEC(@sql)

    IF EXISTS (select * from #jobInfo WHERE [name] = @jobName AND current_execution_status IN (4,5)) -- 4: idle, 5: suspended 
    BEGIN
        SET @sql = 'EXEC [' + @srvName + '].msdb.dbo.sp_start_job @job_name = ''' + @jobName + ''''
        --print @sql    
        EXEC (@sql) 
        INSERT INTO #result (srvName ,status ) VALUES (@srvName, 'Job started.')
    END ELSE BEGIN
        INSERT INTO #result (srvName ,status ) VALUES (@srvName, 'Job is running already. No action taken.')
    END

questionAnswers(2)

yourAnswerToTheQuestion