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 mitsysjobschedules
undsysjobs_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.