In dit artikel presenteer ik drie opties voor het retourneren van de stappen van een SQL Server Agent-taak bij gebruik van T-SQL.
De opties
U kunt de volgende T-SQL-opties gebruiken om de stappen van een SQL Server Agent-taak te retourneren:
- Optie 1 :Voer de
sp_help_job
uit opgeslagen procedure. - Optie 2 :Voer de
sp_help_jobstep
. uit opgeslagen procedure. - Optie 3 :Query de
sysjobsteps
tabel (en voeg eraan toe metsysjobs_view
indien vereist).
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.sysjobsteps
).
Optie 1:sp_help_job
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 stappen.
Hier is een voorbeeld:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultaat:
Dit geeft een overzicht van de taak, evenals alle taakstappen, schema's en doelservers.
Hier is een voorbeeld van de code bij gebruik van de ID:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.
Voorbeeld:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
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:sp_help_jobstep
De sp_help_jobstep
opgeslagen procedure is speciaal ontworpen om de stappen van een taak te retourneren. Maar dat is alles wat het teruggeeft.
Dus als u niets wilt zien van de planning en doelserver-dingen, enz., is dit misschien wat u zoekt.
Je kunt sp_help_jobstep
doorgeven de taaknaam of de ID (maar niet beide).
Hier is een voorbeeld:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
En zo ziet het resultaat eruit bij een klus in twee stappen:
U kunt ook een stap-ID opgeven als u alleen een specifieke stap wilt retourneren. Je moet echter nog steeds specificeren voor welke taak het is (met zijn ID of naam).
Hier is een voorbeeld van het specificeren van de tweede stap in de taak:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
De stap-ID moet daadwerkelijk bestaan voor die taak. Bijvoorbeeld, het specificeren van een stap-ID van 3
voor de bovenstaande taak resulteert in een fout.
Optie 3:De sysjobsteps
Tabel
Een andere optie is om een query uit te voeren tegen de sysjobsteps
tafel.
Deze tabel bevat de stappen van alle taken, dus als u alleen de stappen voor een specifieke taak wilt, moet u de taak-ID doorgeven.
Hier is een voorbeeld van het opvragen van de sysjobsteps
tabel voor de stappen van een specifieke taak:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Dit geeft een vergelijkbaar resultaat als de sp_help_jobstep
procedure.
Als u wilt dat sommige taakdetails worden geretourneerd (zoals de naam), kunt u een join uitvoeren tussen sysjobsteps
en sysjobs_view
.
Voorbeeld:
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;
Dit is het resultaat in mijn testomgeving:
Aangezien dit een left join is, bevat het jobs die geen stappen hebben (zie de NULL
in de step_id
en step_name
kolommen voor de taak genaamd TestJob
).
Gebruik een inner join om het te beperken tot alleen die taken met stappen.