V tomto článku uvádím tři možnosti, jak vrátit kroky úlohy SQL Server Agent při použití T-SQL.
Možnosti
Chcete-li vrátit kroky úlohy SQL Server Agent, můžete použít následující možnosti T-SQL:
- Možnost 1 :Spusťte
sp_help_job
uložené procedury. - Možnost 2 :Proveďte
sp_help_jobstep
uložená procedura. - Možnost 3 :Dotaz na
sysjobsteps
tabulku (a připojte ji pomocísysjobs_view
je-li potřeba).
Všechny tyto možnosti jsou umístěny v msdb databázi, a proto je třeba ji v této databázi spouštět. Můžete to udělat přepnutím na msdb nejprve databáze, nebo příslušnou kvalifikací objektu (např. msdb.dbo.sysjobsteps
).
Možnost 1:sp_help_job
Když zavoláte sp_help_job
bez jakýchkoli argumentů jednoduše vrátí seznam úloh. Když však předáte název nebo ID úlohy, zobrazí se podrobnosti o této úloze, včetně jejích kroků.
Zde je příklad:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Výsledek:
Zde je uveden seznam úlohy a také všechny kroky úlohy, plány a cílové servery.
Zde je příklad kódu při použití ID:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Při použití ID můžete název parametru vynechat, chcete-li.
Příklad:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Syntaxe
Úplná syntaxe sp_help_job
vypadá takto:
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' ]
Viz dokumentaci společnosti Microsoft pro sp_help_job
pro vysvětlení každého parametru a také hodnot, které každý přijímá.
Možnost 2:sp_help_jobstep
sp_help_jobstep
uložená procedura je navržena speciálně pro vrácení kroků úlohy. Ale to je vše, co se vrací.
Pokud tedy nechcete vidět nic z plánu a cílového serveru atd., mohlo by to být to, co hledáte.
Můžete projít sp_help_jobstep
název úlohy nebo její ID (ale ne obojí).
Zde je příklad:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
A takto vypadá výsledek při práci ve dvou krocích:
Můžete také zadat ID kroku, pokud chcete vrátit pouze konkrétní krok. Stále však musíte určit, pro jakou úlohu to je (buď pomocí ID nebo názvu).
Zde je příklad zadání druhého kroku v úloze:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
ID kroku musí pro danou úlohu skutečně existovat. Například zadáním ID kroku 3
u výše uvedené úlohy dojde k chybě.
Možnost 3:sysjobsteps
Tabulka
Další možností je spustit dotaz proti sysjobsteps
stůl.
Tato tabulka obsahuje kroky všech úloh, takže pokud chcete kroky pouze pro konkrétní úlohu, budete muset předat ID úlohy.
Zde je příklad dotazování sysjobsteps
tabulka pro kroky konkrétní úlohy:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
To vrátí podobný výsledek jako sp_help_jobstep
postup.
Pokud chcete, aby byly vráceny některé podrobnosti úlohy (například její název), můžete spustit spojení mezi sysjobsteps
a sysjobs_view
.
Příklad:
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;
Zde je výsledek v mém testovacím prostředí:
Jelikož se jedná o levé spojení, zahrnuje úlohy, které nemají žádné kroky (viz NULL
v step_id
a step_name
sloupce pro úlohu s názvem TestJob
).
Chcete-li jej omezit pouze na úlohy s kroky, použijte vnitřní spojení.