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

3 Möglichkeiten zum Zurückgeben einer Liste von SQL Server-Agent-Jobs (T-SQL)

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.