sql >> Databasteknik >  >> RDS >> Sqlserver

4 sätt att få en lista över scheman i SQL Server Agent (T-SQL)

I den här artikeln presenterar jag fyra alternativ för att använda T-SQL för att returnera de scheman som är kopplade till ett SQL Server Agent-jobb.

Alternativen

Du kan använda följande T-SQL-alternativ för att returnera scheman för ett SQL Server Agent-jobb:

  • Alternativ 1 :Kör sp_help_job lagrad procedur.
  • Alternativ 2 :Kör sp_help_schedule lagrad procedur.
  • Alternativ 3 :Kör sp_help_jobschedule lagrad procedur.
  • Alternativ 4 :Fråga sysschedules tabell (och sammanfoga den med sysjobschedules och sysjobs_view ).

Alla dessa alternativ finns i msdb databasen och måste därför köras i den databasen. Du kan göra det genom att byta till msdb databas först, eller genom att kvalificera objektet på lämpligt sätt (t.ex. msdb.dbo.sysschedules ).

Alternativ 1:sp_help_job Lagrad procedur

När du ringer sp_help_job utan några argument returnerar den helt enkelt en lista med jobb. Men när du skickar ett jobbs namn eller ID listar det detaljerna för jobbet, inklusive dess scheman.

Här är ett exempel:

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

Resultat:

Detta listar jobbet, såväl som alla jobbsteg, scheman och målservrar. I det här fallet finns det två scheman kopplade till jobbet.

Här är ett exempel på koden när du använder ID:t:

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

När du använder ID:t kan du utelämna parameternamnet om du vill.

Exempel:

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

Syntax

Den fullständiga syntaxen för sp_help_job går så här:

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

Se Microsofts dokumentation för sp_help_job för en förklaring av varje parameter, såväl som de värden som var och en accepterar.

Alternativ 2:sp_help_schedule Lagrad procedur

sp_help_schedule lagrad procedur är utformad specifikt för att returnera scheman.

Om du kör det utan att skicka några argument kommer det att returnera alla scheman i instansen:

EXEC sp_help_schedule;

För att få information om ett specifikt schema, skicka antingen schemats namn eller dess ID:

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Även om sp_help_schedule returnerar inte scheman för ett specifikt jobb, du kan använda det för att endast returnera de scheman som är kopplade till ett jobb.

@attached_schedules_only parametern är bit , med standardvärdet 0 , vilket innebär att det returnerar både bifogade och obundna scheman. Skickar värdet 1 begränsar det till bara bifogade scheman.

Exempel:

EXEC sp_help_schedule
	@attached_schedules_only = 1;

En annan sak du kan göra är att använda @include_description parameter för att ange om schemats beskrivning ska inkluderas i resultatuppsättningen eller inte.

Se Använda sp_help_schedule i SQL Server för mer information och exempel.

Alternativ 3:sp_help_jobschedule Lagrad procedur

sp_help_jobschedule lagrad procedur returnerar information om schemaläggning av jobb.

Exempel:

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Detta returnerar en lista över scheman som är kopplade till det angivna jobbet.

Du kan också skicka ett schemas ID eller namn för att returnera just det schemat.

När du ringer sp_help_jobschedule måste du ange antingen jobbnamnet eller dess ID (men inte båda), eller schema-ID. Du kan också skicka schedule_name men endast i kombination med jobb-ID eller dess namn.

Den accepterade kombinationen av argument är lite knepig. Se Använda sp_help_jobschedule i SQL Server för en mer detaljerad förklaring och fler exempel.

Alternativ 4:sysschedules tabell (och andra)

Du kan fråga sysschedules tabell och sammanfoga den med tabeller som sysjobschedules och sysjobs_view för att returnera en lista över jobb och deras tillhörande scheman.

Exempel:

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;

Resultat:

I det här fallet använde jag innerkopplingar för att endast returnera scheman som har ett associerat jobb och vice versa.

Du kan byta till högerkopplingar för att returnera alla scheman, oavsett om de är kopplade till ett jobb, eller vänsterkopplingar för att returnera alla jobb, oavsett om de har ett bifogat schema. Eller så kan du använda fullständiga kopplingar för att helt enkelt returnera allt.


  1. MySQL:#126 - Felaktig nyckelfil för tabell

  2. Standardisera PostgreSQL-säkerhet i flera molnmiljöer

  3. Postgres använder inte index när indexskanning är ett mycket bättre alternativ

  4. Hur QUARTER() fungerar i MariaDB