Trong bài viết này, tôi trình bày bốn tùy chọn sử dụng T-SQL để trả về lịch biểu được đính kèm với công việc SQL Server Agent.
Các tùy chọn
Bạn có thể sử dụng các tùy chọn T-SQL sau để trả về lịch biểu 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_schedule
thủ tục được lưu trữ. - Tùy chọn 3 :Thực thi
sp_help_jobschedule
thủ tục được lưu trữ. - Tùy chọn 4 :Truy vấn
sysschedules
bảng (và nối nó vớisysjobschedules
vàsysjobs_view
).
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.sysschedules
).
Tùy chọn 1:sp_help_job
Thủ tục được lưu trữ
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ả lịch trình của nó.
Đây là một ví dụ:
USE msdb;
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Kết quả:
Điều 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. Trong trường hợp này, có hai lịch trình đi kèm với công việc.
Dưới đây là ví dụ về mã khi sử dụng ID:
EXEC sp_help_job
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
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 '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
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_schedule
Thủ tục được lưu trữ
sp_help_schedule
thủ tục được lưu trữ được thiết kế đặc biệt để trả về lịch biểu.
Nếu bạn thực thi nó mà không chuyển bất kỳ đối số nào, nó sẽ trả về tất cả các lịch trình trong trường hợp:
EXEC sp_help_schedule;
Để nhận thông tin cho một lịch trình cụ thể, hãy chuyển tên hoặc ID của lịch biểu đó:
EXEC sp_help_schedule
@schedule_name = 'Run_Sat_6AM';
Mặc dù sp_help_schedule
không trả lại lịch biểu cho một công việc cụ thể, bạn có thể sử dụng nó để chỉ trả lại những lịch biểu gắn liền với một công việc.
@attached_schedules_only
tham số là bit , với giá trị mặc định là 0
, có nghĩa là nó trả về cả lịch trình đính kèm và không đính kèm. Chuyển giá trị 1
giới hạn nó chỉ trong các lịch trình đính kèm.
Ví dụ:
EXEC sp_help_schedule
@attached_schedules_only = 1;
Một điều khác bạn có thể làm là sử dụng @include_description
để chỉ định có đưa mô tả của lịch biểu vào tập kết quả hay không.
Xem Sử dụng sp_help_schedule
trong SQL Server để biết thêm thông tin và ví dụ.
Tùy chọn 3:sp_help_jobschedule
Thủ tục được lưu trữ
sp_help_jobschedule
thủ tục được lưu trữ trả về thông tin về lịch trình công việc.
Ví dụ:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Thao tác này trả về danh sách lịch biểu được đính kèm với công việc đã chỉ định.
Bạn cũng có thể chuyển ID hoặc tên của lịch biểu để chỉ trả lại lịch biểu đó.
Khi bạn gọi sp_help_jobschedule
, bạn phải cung cấp tên công việc hoặc ID của nó (nhưng không phải cả hai) hoặc ID lịch trình. Bạn cũng có thể chuyển schedule_name
nhưng chỉ kết hợp với ID công việc hoặc tên của nó.
Sự kết hợp được chấp nhận của các đối số là một chút khó khăn. Xem Sử dụng sp_help_jobschedule
trong SQL Server để có giải thích chi tiết hơn và nhiều ví dụ hơn.
Tùy chọn 4:sysschedules
bảng (và những cái khác)
Bạn có thể truy vấn sysschedules
bảng và nối nó với các bảng như sysjobschedules
và sysjobs_view
để trả về danh sách công việc và lịch trình liên quan của chúng.
Ví dụ:
SELECT
jv.name,
jv.description,
s.schedule_id,
s.name,
s.freq_type,
s.freq_interval,
s.freq_subday_type,
s.freq_subday_interval,
js.next_run_date,
js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;
Kết quả:
Trong trường hợp này, tôi đã sử dụng các phép nối bên trong để chỉ trả về các lịch biểu có công việc liên quan và ngược lại.
Bạn có thể chuyển sang liên kết bên phải để trả lại tất cả lịch biểu, bất kể chúng có gắn với một công việc hay không, hay liên kết bên trái để trả lại tất cả công việc, bất kể chúng có lịch biểu đính kèm hay không. Hoặc bạn có thể sử dụng các phép nối đầy đủ để chỉ cần trả lại mọi thứ.