TRY / CATCH funktioniert nicht bei SQL Server Agent-Fehlern?

ich benutzesp_start_job einen Job anfangen.

Die Arbeit (test2) hat nur einen Schritt:

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

DasTRY/CATCH Code:

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

Erster Code-Lauf:

Job 'test2' wurde erfolgreich gestartet.

Zweiter Code-Lauf (innerhalb von 10 Sekunden):

Meldung 22022, Ebene 16, Status 1, Zeile 0
SQLServerAgent-Fehler: Anforderung zum Ausführen von Job test2 (von Benutzersa) abgelehnt, da der Job bereits von einer Anforderung von Benutzersa ausgeführt wird.

Warum tutTRY/CATCH funktioniert das in diesem szenario nicht?

UPDATE: Ich sollte zuerst hinzufügen, dass ich auf einem SQL Server 2005 arbeite, der Verbindungsserver hat (SQL Server 2000). Ich habe versucht, einen Proc auf dem SQL Server 2005-Server zu schreiben, um einen Job auf allen Verbindungsservern zu sehen. Wenn der Job nicht ausgeführt wird, führen Sie ihn aus. Anfänglich habe ich try - catch verwendet und gehofft, Fehler abzufangen, wenn der bereits ausgeführte Job ausgeführt wurde, aber fehlgeschlagen ist (dieser Thread).

Ich habe schließlich folgenden Code verwendet: (Es wird nicht kompiliert, Sie müssen einige Variablen ersetzen, gibt nur eine Idee)

    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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage