W tym artykule przedstawiam trzy opcje zwracania kroków zadania agenta SQL Server podczas korzystania z T-SQL.
Opcje
Możesz użyć następujących opcji T-SQL, aby zwrócić kroki zadania SQL Server Agent:
- Opcja 1 :Wykonaj
sp_help_job
procedura składowana. - Opcja 2 :Wykonaj
sp_help_jobstep
procedura składowana. - Opcja 3 :Zapytaj o
sysjobsteps
tabeli (i dołącz do niej za pomocąsysjobs_view
Jeśli wymagane).
Wszystkie te opcje znajdują się w msdb bazy danych, a zatem muszą być uruchamiane w tej bazie danych. Możesz to zrobić, przechodząc do msdb bazy danych lub przez odpowiednią kwalifikację obiektu (np. msdb.dbo.sysjobsteps
).
Opcja 1:sp_help_job
Gdy zadzwonisz do sp_help_job
bez żadnych argumentów, po prostu zwraca listę zadań. Ale kiedy podasz nazwę lub identyfikator pracy, wyszczególnia ona szczegóły tej pracy, w tym jej kroki.
Oto przykład:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Wynik:
To zawiera listę zadań, a także wszystkie etapy zadania, harmonogramy i serwery docelowe.
Oto przykład kodu przy użyciu identyfikatora:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Używając identyfikatora, możesz pominąć nazwę parametru, jeśli chcesz.
Przykład:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Składnia
Pełna składnia sp_help_job
idzie tak:
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' ]
Zobacz dokumentację Microsoft dla sp_help_job
dla wyjaśnienia każdego parametru, a także wartości, które każdy akceptuje.
Opcja 2:sp_help_jobstep
sp_help_jobstep
procedura składowana jest przeznaczona specjalnie do zwracania kroków zadania. Ale to wszystko, co powraca.
Więc jeśli nie chcesz widzieć żadnego harmonogramu i serwerów docelowych itp., może to być to, czego szukasz.
Możesz przekazać sp_help_jobstep
nazwę zadania lub jego identyfikator (ale nie oba).
Oto przykład:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
A oto jak wygląda wynik dwuetapowej pracy:
Możesz również określić identyfikator kroku, jeśli chcesz, aby zwracany był tylko określony krok. Nadal musisz jednak określić, do której pracy jest przeznaczony (za pomocą identyfikatora lub nazwy).
Oto przykład określenia drugiego kroku w pracy:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
Identyfikator kroku musi faktycznie istnieć dla tego zadania. Na przykład określenie identyfikatora kroku 3
dla powyższej pracy powoduje błąd.
Opcja 3:sysjobsteps
Tabela
Inną opcją jest uruchomienie zapytania względem sysjobsteps
stół.
Ta tabela zawiera kroki wszystkich zadań, więc jeśli chcesz tylko kroki dla określonej pracy, musisz przekazać identyfikator pracy.
Oto przykład zapytania sysjobsteps
tabela dla etapów określonej pracy:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Zwraca to podobny wynik do sp_help_jobstep
procedura.
Jeśli chcesz, aby niektóre szczegóły zadania zostały zwrócone (takie jak jego nazwa), możesz uruchomić połączenie między sysjobsteps
i sysjobs_view
.
Przykład:
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;
Oto wynik w moim środowisku testowym:
Ponieważ jest to lewe sprzężenie, obejmuje zadania, które nie mają żadnych kroków (zobacz NULL
w step_id
i step_name
kolumny dla zadania o nazwie TestJob
).
Aby ograniczyć to tylko do tych zadań z krokami, użyj połączenia wewnętrznego.