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 mitsysjobs_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.