sql >> Databáze >  >> RDS >> Sqlserver

3 způsoby, jak získat práci Kroky úlohy SQL Server Agent (T-SQL)

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í.


  1. Co je schéma v SQL a jak jej vytvořit?

  2. Vždy šifrovaný výkon:Následná akce

  3. Která syntaxe spojení je lepší?

  4. Vypočítaný sloupec v EF Code First