it-swarm.com.de

Aufrufen eines SQL Server-Jobs innerhalb eines anderen Jobs

Ist es möglich, einen SQL Server-Job aufzurufen, um ihn in einem anderen Job auszuführen?

Ich weiß, dass wir alle Schritte von Job 1 zu Job 2 hinzufügen können, aber ich ziehe es vor, das nicht zu tun. Erstens ist Job 2 bereits ziemlich groß und zweitens konnte ich keine Option zum Kopieren und Einfügen finden, um Schritte zwischen Jobs zu kopieren. Daher wäre es zeitaufwändig, die Schritte manuell hinzuzufügen.

Jeder Vorschlag wird geschätzt.

10
Sky
  • Klicken Sie mit der rechten Maustaste auf den Job, dessen Schritte Sie hinzufügen möchten, und wählen Sie "Skriptjob als-> In neues Abfragefenster erstellen". Suchen Sie im resultierenden Skript nach allen Abschnitten, die dieses Format haben
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'<stepname>', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=3, 
  @on_success_step_id=0, 
  @on_fail_action=2, 
  @on_fail_step_id=0, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, @subsystem=N'TSQL', 
  @command=N'<code>', 
  @database_name=N'', 
  @flags=0
  • Öffnen Sie ein neues Abfragefenster und führen Sie Folgendes aus:
DECLARE @jobId BINARY(16)
    SET @jobId = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = '<job name, to which you want to copy the steps>')

-- Followed by all the msdb.dbo.sp_add_jobstep from the script that scripted out in the earlier step

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'<stepname>', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=3, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'TSQL', 
      @command=N'<code>', 
      @database_name=N'', 
      @flags=0
7
WrinkleFree

Option 1

Erstellen Sie in Job2 einen Jobschritt vom Typ TSQL Command. Lassen Sie im Inhalt den vorhandenen Job ausführen ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

Das wird asynchron ausgeführt. Nach dem Start ruft die gespeicherte Prozedur auf und führt den nächsten Schritt im Job aus. Es wird nicht warten, bis der gestartete Job abgeschlossen ist. Wenn der aufgerufene Job fehlschlägt, wird er nicht zum aufrufenden Job zurückgesickert.

Option 2

Klicken Sie mit der rechten Maustaste auf Job1 und schreiben Sie ein Skript für das neue Abfragefenster. Wiederholen Sie dies mit Job2 und führen Sie die Jobschritte nach Bedarf von 1 nach 2 ein. Weit weniger klicken als das Rad neu erstellen und hoffentlich weniger fehleranfällig.

14
billinkc

Vom Stapelüberlauf (Mafafu)

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'Job 1' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    PRINT 'Waiting...'
    WAITFOR DELAY '00:00:02';   
end
6
Chris Harland