Thông thường, cách nhanh nhất để có được danh sách các công việc của SQL Server Agent là chỉ cần mở rộng nút SQL Server Agent trong Trình khám phá đối tượng SSMS.
Nhưng đó không phải là cách duy nhất. Và tùy thuộc vào môi trường của bạn, nó thậm chí có thể không phải là một lựa chọn. Nếu bạn không có SSMS hoặc công cụ cơ sở dữ liệu cho phép bạn xem các công việc của SQL Server Agent, bạn có thể cần sử dụng T-SQL để thay thế.
Trong bài viết này, tôi trình bày ba tùy chọn để trả về danh sách các công việc của 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 sau để trả về danh sách các công việc SQL Server Agent với T-SQL:
- Tùy chọn 1 :Thực thi
sp_help_job
thủ tục được lưu trữ. - Tùy chọn 2 :Truy vấn
sysjobs_view
xem. - Tùy chọn 3 :Truy vấn
sysjobs
bàn trực tiếp.
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.sysjobs_view
).
Tùy chọn 1:sp_help_job
Khi sử dụng sp_help_job
để trả về danh sách các công việc SQL Server Agent, chỉ cần thực thi nó mà không cần bất kỳ đối số nào.
Như thế này:
USE msdb;
EXEC sp_help_job;
Trong trường hợp này, tôi đã chuyển sang msdb cơ sở dữ liệu đầu tiên, điều đó có nghĩa là tôi không cần phải đáp ứng đầy đủ quy trình với tên và giản đồ cơ sở dữ liệu.
Dưới đây là giao diện khi tôi sử dụng SSMS để thực thi nó trong môi trường thử nghiệm của mình:
Trả lại một công việc cụ thể
Bạn có thể sử dụng cùng một quy trình được lưu trữ để trả về chi tiết của bất kỳ công việc nào trong số những công việc đó. Khi bạn làm điều đó, bạn sẽ có nhiều chi tiết hơn những gì bạn có được khi liệt kê tất cả các công việc.
Để biết chi tiết công việc, bạn cần cung cấp tên hoặc ID công việc.
Đâ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:sysjobs_view
Xem
Bạn có thể sử dụng sysjobs_view
để trả về danh sách các công việc của SQL Server Agent.
Ví dụ:
SELECT * FROM msdb.dbo.sysjobs_view;
Trong trường hợp này, tôi đã đủ điều kiện tên chế độ xem với cơ sở dữ liệu và lược đồ.
Chế độ xem này trả về kết quả tương tự (nhưng hơi khác) được đặt cho sp_help_job
thủ tục được lưu trữ khi được sử dụng mà không có bất kỳ đối số nào.
Nếu bạn muốn thông tin chi tiết về công việc như các bước, lịch trình, v.v., bạn sẽ cần kết hợp nó với các bảng khác, chẳng hạn như sysjobsteps
, sysjobschedules
, sysjobactivity
, sysjobhistory
, v.v.
Dưới đây là một ví dụ về việc kết hợp nó với sysjobsteps
bảng:
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ó ở những công việc chỉ với các bước, hãy sử dụng một phép nối bên trong.
Tùy chọn 3:sysjobs
Bảng
Dưới đây là một ví dụ về việc truy cập trực tiếp vào sysjobs
bảng:
SELECT * FROM msdb.dbo.sysjobs;
Đối với chế độ xem, nếu bạn muốn chi tiết công việc như các bước, lịch trình, v.v., bạn sẽ cần kết hợp nó với các bảng khác, chẳng hạn như sysjobsteps
, sysjobschedules
, sysjobactivity
, sysjobhistory
, v.v.
Bạn thường nên truy vấn chế độ xem thay vì truy vấn trực tiếp bảng.