sql >> Database >  >> RDS >> Sqlserver

4 manieren om een ​​lijst met schema's te krijgen in SQL Server Agent (T-SQL)

In dit artikel presenteer ik vier opties voor het gebruik van T-SQL om de schema's te retourneren die aan een SQL Server Agent-taak zijn gekoppeld.

De opties

U kunt de volgende T-SQL-opties gebruiken om de schema's van een SQL Server Agent-taak te retourneren:

  • Optie 1 :Voer de sp_help_job uit opgeslagen procedure.
  • Optie 2 :Voer de sp_help_schedule uit opgeslagen procedure.
  • Optie 3 :Voer het sp_help_jobschedule uit opgeslagen procedure.
  • Optie 4 :Query de sysschedules tabel (en voeg deze samen met sysjobschedules en sysjobs_view ).

Al deze opties bevinden zich in de msdb database, en moeten daarom in die database worden uitgevoerd. U kunt dat doen door over te schakelen naar de msdb database eerst, of door het object op de juiste manier te kwalificeren (bijv. msdb.dbo.sysschedules ).

Optie 1:De sp_help_job Opgeslagen procedure

Wanneer u sp_help_job . belt zonder argumenten retourneert het eenvoudig een lijst met taken. Maar wanneer u de naam of ID van een taak doorgeeft, worden de details voor die taak weergegeven, inclusief de planningen.

Hier is een voorbeeld:

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

Resultaat:

Dit geeft een overzicht van de taak, evenals alle taakstappen, schema's en doelservers. In dit geval zijn er twee schema's aan de taak gekoppeld.

Hier is een voorbeeld van de code bij gebruik van de ID:

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

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

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

Syntaxis

De volledige syntaxis van sp_help_job gaat als volgt:

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' ]

Zie de documentatie van Microsoft voor sp_help_job voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.

Optie 2:De sp_help_schedule Opgeslagen procedure

De sp_help_schedule opgeslagen procedure is speciaal ontworpen om schema's te retourneren.

Als je het uitvoert zonder argumenten door te geven, zal het alle schema's in de instantie retourneren:

EXEC sp_help_schedule;

Om informatie voor een specifiek schema te krijgen, geef je de naam of het ID van het schema door:

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Hoewel sp_help_schedule retourneert geen schema's voor een specifieke taak, u kunt het gebruiken om alleen die schema's te retourneren die aan een taak zijn gekoppeld.

De @attached_schedules_only parameter is bit , met een standaardwaarde van 0 , wat betekent dat het zowel gekoppelde als niet-bijgevoegde schema's retourneert. Een waarde van 1 doorgeven beperkt het tot alleen bijgevoegde schema's.

Voorbeeld:

EXEC sp_help_schedule
	@attached_schedules_only = 1;

Een ander ding dat u kunt doen, is de @include_description . gebruiken parameter om aan te geven of de beschrijving van het schema al dan niet moet worden opgenomen in de resultatenset.

Zie sp_help_schedule gebruiken in SQL Server voor meer informatie en voorbeelden.

Optie 3:Het sp_help_jobschedule Opgeslagen procedure

Het sp_help_jobschedule opgeslagen procedure retourneert informatie over de planning van taken.

Voorbeeld:

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Dit retourneert een lijst met schema's die aan de opgegeven taak zijn gekoppeld.

Je kunt ook de ID of naam van een schema doorgeven om alleen dat schema terug te geven.

Wanneer u sp_help_jobschedule . aanroept , moet u de taaknaam of de ID (maar niet beide) of de plannings-ID opgeven. Je kunt ook de schedule_name . doorgeven maar alleen in combinatie met de taak-ID of de naam ervan.

De geaccepteerde combinatie van argumenten is een beetje lastig. Zie sp_help_jobschedule gebruiken in SQL Server voor een meer gedetailleerde uitleg en meer voorbeelden.

Optie 4:De sysschedules tafel (en anderen)

U kunt de sysschedules . opvragen table en voeg het samen met tabellen zoals sysjobschedules en sysjobs_view om een ​​lijst met taken en de bijbehorende schema's terug te sturen.

Voorbeeld:

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;

Resultaat:

In dit geval heb ik inner joins gebruikt om alleen schema's te retourneren die een bijbehorende taak hebben en vice versa.

U kunt overschakelen naar rechtse joins om alle schema's te retourneren, ongeacht of ze aan een taak zijn gekoppeld, of linkse joins om alle taken te retourneren, ongeacht of ze een bijgevoegd schema hebben. Of je kunt volledige joins gebruiken om alles terug te sturen.


  1. Maak een trigger die een kolom in de ene tabel bijwerkt wanneer een kolom in een andere tabel wordt bijgewerkt

  2. Asynchrone replicatie instellen tussen MariaDB Galera-clusters

  3. Een andere PL/SQL-procedure aanroepen binnen een procedure

  4. Mytop – Een handig hulpmiddel voor het bewaken van MySQL/MariaDB-prestaties in Linux