Der schnellste Weg, um eine Liste der SQL Server-Agent-Jobs zu erhalten, besteht häufig darin, einfach den SQL Server-Agent-Knoten im SSMS-Objekt-Explorer zu erweitern.
Aber das ist nicht der einzige Weg. Und abhängig von Ihrer Umgebung ist dies möglicherweise nicht einmal eine Option. Wenn Sie nicht über SSMS oder ein Datenbanktool verfügen, mit dem Sie die Jobs des SQL Server-Agenten anzeigen können, müssen Sie möglicherweise stattdessen T-SQL verwenden.
In diesem Artikel stelle ich drei Optionen zum Zurückgeben einer Liste von SQL Server-Agent-Jobs bei Verwendung von T-SQL vor.
Die Optionen
Sie können die folgenden Optionen verwenden, um eine Liste von SQL Server-Agent-Jobs mit T-SQL zurückzugeben:
- Möglichkeit 1 :Führen Sie den
sp_help_job
aus gespeicherte Prozedur. - Möglichkeit 2 :Fragen Sie
sysjobs_view
ab ansehen. - Möglichkeit 3 :Fragen Sie die
sysjobs
ab Tabelle direkt.
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.sysjobs_view
).
Option 1:sp_help_job
Bei Verwendung von sp_help_job
Um eine Liste von SQL Server Agent-Jobs zurückzugeben, führen Sie sie einfach ohne Argumente aus.
So:
USE msdb;
EXEC sp_help_job;
In diesem Fall bin ich auf die msdb umgestiegen Datenbank zuerst, was bedeutete, dass ich die Prozedur nicht vollständig mit dem Datenbanknamen und dem Schema qualifizieren musste.
So sieht das aus, wenn ich SSMS verwende, um es in meiner Testumgebung auszuführen:
Geben Sie einen bestimmten Job zurück
Sie können dieselbe gespeicherte Prozedur verwenden, um die Details eines dieser Jobs zurückzugeben. Wenn Sie das tun, erhalten Sie viel mehr Details, als wenn Sie alle Jobs auflisten würden.
Um die Jobdetails abzurufen, müssen Sie den Jobnamen oder die ID angeben.
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 Erklärung jedes Parameters sowie der Werte, die jeder akzeptiert.
Option 2:Die sysjobs_view
Anzeigen
Sie können die sysjobs_view
verwenden um eine Liste von SQL Server Agent-Jobs zurückzugeben.
Beispiel:
SELECT * FROM msdb.dbo.sysjobs_view;
In diesem Fall habe ich den Ansichtsnamen mit der Datenbank und dem Schema qualifiziert.
Diese Ansicht gibt eine ähnliche (aber etwas andere) Ergebnismenge wie sp_help_job
zurück gespeicherte Prozedur, wenn sie ohne Argumente verwendet wird.
Wenn Sie Jobdetails wie Schritte, Zeitpläne usw. wünschen, müssen Sie sie mit anderen Tabellen wie sysjobsteps
verknüpfen , sysjobschedules
, sysjobactivity
, sysjobhistory
usw.
Hier ist ein Beispiel für die Verknüpfung mit den sysjobsteps
Tabelle:
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.
Option 3:Die sysjobs
Tabelle
Hier ist ein Beispiel für den direkten Aufruf der sysjobs
Tabelle:
SELECT * FROM msdb.dbo.sysjobs;
Wie bei der Ansicht müssen Sie Jobdetails wie Schritte, Zeitpläne usw. mit anderen Tabellen verknüpfen, z. B. sysjobsteps
, sysjobschedules
, sysjobactivity
, sysjobhistory
usw.
Es wird normalerweise empfohlen, die Ansicht und nicht direkt die Tabelle abzufragen.