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

4 Möglichkeiten zum Abrufen einer Liste von Zeitplänen im SQL Server-Agent (T-SQL)

In diesem Artikel stelle ich vier Optionen für die Verwendung von T-SQL vor, um die Zeitpläne zurückzugeben, die an einen SQL Server-Agent-Auftrag angehängt sind.

Die Optionen

Sie können die folgenden T-SQL-Optionen verwenden, um die Zeitpläne 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 sp_help_schedule aus gespeicherte Prozedur.
  • Möglichkeit 3 :Führen Sie sp_help_jobschedule aus gespeicherte Prozedur.
  • Option 4 :Fragen Sie die sysschedules ab Tabelle (und verbinden Sie sie mit sysjobschedules und sysjobs_view ).

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.sysschedules ).

Option 1:Der sp_help_job Gespeicherte Prozedur

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 Zeitpläne.

Hier ist ein Beispiel:

USE msdb;
EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Ergebnis:

Hier werden der Job sowie alle Jobschritte, Zeitpläne und Zielserver aufgeführt. In diesem Fall sind dem Job zwei Zeitpläne zugeordnet.

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

EXEC sp_help_job 
	@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

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

Beispiel:

EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

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:Der sp_help_schedule Gespeicherte Prozedur

Der sp_help_schedule Stored Procedure wurde speziell entwickelt, um Zeitpläne zurückzugeben.

Wenn Sie es ohne Übergabe von Argumenten ausführen, werden alle Zeitpläne in der Instanz zurückgegeben:

EXEC sp_help_schedule;

Um Informationen zu einem bestimmten Zeitplan zu erhalten, übergeben Sie entweder den Namen des Zeitplans oder seine ID:

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Obwohl sp_help_schedule keine Zeitpläne für einen bestimmten Job zurückgibt, können Sie damit nur die Zeitpläne zurückgeben, die einem Job zugeordnet sind.

Der @attached_schedules_only Parameter ist bit , mit einem Standardwert von 0 , was bedeutet, dass sowohl angehängte als auch nicht angehängte Zeitpläne zurückgegeben werden. Übergeben eines Werts von 1 beschränkt es auf nur angehängte Zeitpläne.

Beispiel:

EXEC sp_help_schedule
	@attached_schedules_only = 1;

Sie können auch @include_description verwenden -Parameter, um anzugeben, ob die Beschreibung des Zeitplans in die Ergebnismenge aufgenommen werden soll oder nicht.

Siehe Verwenden von sp_help_schedule in SQL Server für weitere Informationen und Beispiele.

Option 3:Der sp_help_jobschedule Gespeicherte Prozedur

Der sp_help_jobschedule gespeicherte Prozedur gibt Informationen über die Planung von Jobs zurück.

Beispiel:

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Dies gibt eine Liste von Zeitplänen zurück, die dem angegebenen Job zugeordnet sind.

Sie können auch die ID oder den Namen eines Zeitplans übergeben, um nur diesen Zeitplan zurückzugeben.

Wenn Sie sp_help_jobschedule aufrufen , müssen Sie entweder den Jobnamen oder seine ID (aber nicht beides) oder die Zeitplan-ID angeben. Sie können auch den schedule_name übergeben aber nur in Kombination mit der Job-ID oder ihrem Namen.

Die akzeptierte Kombination von Argumenten ist etwas knifflig. Siehe Verwenden von sp_help_jobschedule in SQL Server für eine ausführlichere Erklärung und weitere Beispiele.

Option 4:Die sysschedules Tabelle (und andere)

Sie können die sysschedules abfragen Tabelle und verknüpfen Sie sie mit Tabellen wie sysjobschedules und sysjobs_view um eine Liste von Jobs und ihren zugehörigen Zeitplänen zurückzugeben.

Beispiel:

SELECT
	jv.name,
	jv.description,
	s.schedule_id,
	s.name,
	s.freq_type,
	s.freq_interval,
	s.freq_subday_type,
	s.freq_subday_interval,
	js.next_run_date,
	js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;

Ergebnis:

In diesem Fall habe ich innere Verknüpfungen verwendet, um nur Zeitpläne zurückzugeben, die einen zugeordneten Job haben und umgekehrt.

Sie können zu Rechtsverknüpfungen wechseln, um alle Zeitpläne zurückzugeben, unabhängig davon, ob sie an einen Job angehängt sind, oder zu Linksverknüpfungen, um alle Jobs zurückzugeben, unabhängig davon, ob sie einen angehängten Zeitplan haben. Oder Sie könnten vollständige Verknüpfungen verwenden, um einfach alles zurückzugeben.