Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

3 Möglichkeiten zum Abrufen der Auftragsschritte eines SQL Server-Agentenauftrags (T-SQL)

In diesem Artikel stelle ich drei Optionen zum Zurückgeben der Schritte eines SQL Server-Agent-Auftrags bei Verwendung von T-SQL vor.

Die Optionen

Sie können die folgenden T-SQL-Optionen verwenden, um die Schritte eines SQL Server-Agent-Auftrags zurückzugeben:

  • Möglichkeit 1 :Führen Sie den sp_help_job aus gespeicherte Prozedur.
  • Möglichkeit 2 :Führen Sie den sp_help_jobstep aus gespeicherte Prozedur.
  • Möglichkeit 3 :Fragen Sie die sysjobsteps ab Tabelle (und verbinden Sie sie mit sysjobs_view Falls erforderlich).

Alle diese Optionen befinden sich in der msdb Datenbank und müssen daher in dieser Datenbank ausgeführt werden. Sie können dies tun, indem Sie zur msdb wechseln Datenbank zuerst oder indem Sie das Objekt entsprechend qualifizieren (z. B. msdb.dbo.sysjobsteps ).

Option 1:sp_help_job

Wenn Sie sp_help_job aufrufen ohne Argumente gibt es einfach eine Liste von Jobs zurück. Aber wenn Sie den Namen oder die ID eines Jobs übergeben, werden die Details für diesen Job aufgelistet, einschließlich seiner Schritte.

Hier ist ein Beispiel:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Ergebnis:

Dies listet den Job sowie alle Jobschritte, Zeitpläne und Zielserver auf.

Hier ist ein Beispiel für den Code bei Verwendung der ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Wenn Sie die ID verwenden, können Sie den Parameternamen weglassen, wenn Sie möchten.

Beispiel:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Syntax

Die vollständige Syntax von sp_help_job geht so:

sp_help_job { [ @job_id = ] job_id  
[ @job_name = ] 'job_name' }   
     [ , [ @job_aspect = ] 'job_aspect' ]   
     [ , [ @job_type = ] 'job_type' ]   
     [ , [ @owner_login_name = ] 'login_name' ]   
     [ , [ @subsystem = ] 'subsystem' ]   
     [ , [ @category_name = ] 'category' ]   
     [ , [ @enabled = ] enabled ]   
     [ , [ @execution_status = ] status ]   
     [ , [ @date_comparator = ] 'date_comparison' ]   
     [ , [ @date_created = ] date_created ]   
     [ , [ @date_last_modified = ] date_modified ]   
     [ , [ @description = ] 'description_pattern' ]

Siehe die Microsoft-Dokumentation für sp_help_job für eine Erläuterung jedes Parameters sowie der Werte, die jeder akzeptiert.

Option 2:sp_help_jobstep

Der sp_help_jobstep Die gespeicherte Prozedur wurde speziell entwickelt, um die Schritte eines Jobs zurückzugeben. Aber das ist alles, was es zurückgibt.

Wenn Sie also nichts von dem Zeitplan und den Zielservern usw. sehen möchten, könnte dies das sein, wonach Sie suchen.

Sie können sp_help_jobstep übergeben den Jobnamen oder seine ID (aber nicht beides).

Hier ist ein Beispiel:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest';

Und so sieht das Ergebnis bei einem zweistufigen Job aus:

Sie können auch eine Schritt-ID angeben, wenn nur ein bestimmter Schritt zurückgegeben werden soll. Sie müssen jedoch noch angeben, für welchen Job es bestimmt ist (entweder mit seiner ID oder seinem Namen).

Hier ist ein Beispiel für die Angabe des zweiten Schritts im Job:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest', 
	@step_id = 2;

Die Schritt-ID muss für diesen Job tatsächlich existieren. Geben Sie beispielsweise eine Schritt-ID von 3 an für den obigen Job führt zu einem Fehler.

Option 3:Die sysjobsteps Tabelle

Eine weitere Option besteht darin, eine Abfrage für die sysjobsteps auszuführen Tisch.

Diese Tabelle enthält die Schritte aller Jobs. Wenn Sie also nur die Schritte für einen bestimmten Job möchten, müssen Sie die Job-ID übergeben.

Hier ist ein Beispiel für die Abfrage der sysjobsteps Tabelle für die Schritte eines bestimmten Jobs:

SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Dies gibt ein ähnliches Ergebnis wie sp_help_jobstep zurück Verfahren.

Wenn Sie möchten, dass einige Jobdetails zurückgegeben werden (z. B. sein Name), können Sie einen Join zwischen sysjobsteps ausführen und sysjobs_view .

Beispiel:

SELECT
	jv.name,
	jv.description,
	jv.start_step_id,
	js.step_id,
	js.step_name
FROM msdb.dbo.sysjobs_view jv
LEFT JOIN msdb.dbo.sysjobsteps js
ON jv.job_id = js.job_id;

Hier ist das Ergebnis in meiner Testumgebung:

Da es sich um einen linken Join handelt, enthält er Jobs, die keine Schritte haben (siehe NULL in der step_id und step_name Spalten für den Job namens TestJob ).

Um es nur auf Jobs mit Schritten zu beschränken, verwenden Sie einen inneren Join.