Trong bài viết này, tôi trình bày ba tùy chọn để trả về các bước của công việc SQL Server Agent khi sử dụng T-SQL.
Các tùy chọn
Bạn có thể sử dụng các tùy chọn T-SQL sau để trả về các bước của công việc SQL Server Agent:
- Tùy chọn 1 :Thực thi
sp_help_job
thủ tục được lưu trữ. - Tùy chọn 2 :Thực thi
sp_help_jobstep
thủ tục được lưu trữ. - Tùy chọn 3 :Truy vấn
sysjobsteps
bảng (và nối nó vớisysjobs_view
nếu được yêu cầu).
Tất cả các tùy chọn này đều nằm trong msdb cơ sở dữ liệu, và do đó cần được chạy trong cơ sở dữ liệu đó. Bạn có thể làm điều đó bằng cách chuyển sang msdb cơ sở dữ liệu trước tiên hoặc bằng cách định tính đối tượng một cách thích hợp (ví dụ:msdb.dbo.sysjobsteps
).
Tùy chọn 1:sp_help_job
Khi bạn gọi sp_help_job
mà không có bất kỳ đối số nào, nó chỉ trả về một danh sách các công việc. Nhưng khi bạn chuyển tên hoặc ID của một công việc, nó sẽ liệt kê các chi tiết cho công việc đó, bao gồm cả các bước của nó.
Đây là một ví dụ:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Kết quả:
Phần này liệt kê công việc cũng như bất kỳ bước công việc, lịch trình và máy chủ mục tiêu nào.
Dưới đây là ví dụ về mã khi sử dụng ID:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Khi sử dụng ID, bạn có thể bỏ qua tên tham số nếu muốn.
Ví dụ:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Cú pháp
Cú pháp đầy đủ của sp_help_job
như sau:
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' ]
Xem tài liệu của Microsoft về sp_help_job
để biết giải thích về từng tham số, cũng như các giá trị mà mỗi tham số chấp nhận.
Tùy chọn 2:sp_help_jobstep
sp_help_jobstep
thủ tục được lưu trữ được thiết kế đặc biệt để trả về các bước của một công việc. Nhưng đó là tất cả những gì nó trở lại.
Vì vậy, nếu bạn không muốn xem bất kỳ nội dung nào trong lịch trình và máy chủ mục tiêu, v.v., thì đây có thể là những gì bạn đang tìm kiếm.
Bạn có thể vượt qua sp_help_jobstep
tên công việc hoặc ID của nó (nhưng không phải cả hai).
Đây là một ví dụ:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
Và đây là kết quả của một công việc hai bước:
Bạn cũng có thể chỉ định ID bước nếu bạn chỉ muốn trả lại một bước cụ thể. Tuy nhiên, bạn vẫn phải chỉ định công việc đó là gì (kèm theo ID hoặc tên của nó).
Dưới đây là một ví dụ về việc chỉ định bước thứ hai trong công việc:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
ID bước cần thực sự tồn tại cho công việc đó. Ví dụ:chỉ định ID bước là 3
cho công việc trên dẫn đến một lỗi.
Tùy chọn 3:sysjobsteps
Bảng
Một tùy chọn khác là chạy một truy vấn đối với sysjobsteps
bàn.
Bảng này chứa các bước của tất cả các công việc, vì vậy nếu bạn chỉ muốn các bước cho một công việc cụ thể, bạn sẽ cần chuyển ID công việc.
Đây là một ví dụ về truy vấn sysjobsteps
bảng cho các bước của một công việc cụ thể:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Điều này trả về một kết quả tương tự cho sp_help_jobstep
thủ tục.
Nếu bạn muốn một số chi tiết công việc được trả về (chẳng hạn như tên của công việc), bạn có thể chạy kết hợp giữa sysjobsteps
và sysjobs_view
.
Ví dụ:
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;
Đây là kết quả trong môi trường thử nghiệm của tôi:
Với việc đây là kết hợp bên trái, nó bao gồm các công việc không có bất kỳ bước nào (xem NULL
trong step_id
và step_name
cột cho công việc được gọi là TestJob
).
Để giới hạn nó chỉ trong những công việc có các bước, hãy sử dụng một phép nối bên trong.