Trong SQL Server, sp_help_jobschedule
thủ tục được lưu trữ trả về thông tin về lịch trình công việc.
Bài viết này cung cấp tổng quan về quy trình được lưu trữ này bao gồm các ví dụ.
Cú pháp
Cú pháp chính thức như sau:
sp_help_jobschedule { [ @job_id = ] job_id | [ @job_name = ] 'job_name' }
[ , [ @schedule_name = ] 'schedule_name' ]
[ , [ @schedule_id = ] schedule_id ]
[ , [ @include_description = ] include_description ]
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 tên của lịch biểu 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 là một chút khó khăn. Về cơ bản, nó diễn ra như thế này:
Nếu schedule_id
được chỉ định, không phải job_id
cũng không phải job_name
có thể được chỉ định. Nếu không, job_id
hoặc job_name
các tham số có thể được sử dụng với schedule_name
.
Tuy nhiên, bạn sẽ không thể sử dụng schedule_id
nếu một lịch trình được đính kèm với nhiều công việc.
Lưu ý rằng sp_help_jobschedule
nằm trong msdb cơ sở dữ liệu, vì vậy nó cần được chạy từ đó. Bạn có thể thực hiện việc này bằng cách chuyển sang msdb cơ sở dữ liệu (ví dụ:với USE msdb
), hoặc bằng cách xác định quy trình với tên cơ sở dữ liệu và giản đồ (tức là msdb.dbo.sp_help_jobschedule
).
Ví dụ
Dưới đây là một ví dụ để minh họa cách trả lại tất cả các lịch biểu được đính kèm với một công việc cụ thể:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Kết quả:
Thao tác này trả về danh sách lịch biểu được đính kèm với công việc được chỉ định với @job_name
đối số.
Ngoài ra, tôi có thể đã vượt qua @job_id
:
EXEC sp_help_jobschedule
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Nhưng trong trường hợp đó, tôi không thể sử dụng @job_name
(đó là cái này hoặc cái kia).
Khi sử dụng ID công việc, bạn có thể bỏ qua tên tham số nếu muốn:
EXEC sp_help_jobschedule '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Sử dụng @schedule_id
Tham số
Ngoài ra, bạn có thể nhận được một lịch biểu dựa trên ID của nó:
EXEC sp_help_jobschedule
@schedule_id = 15;
Điều này hoạt động tốt miễn là lịch trình không bị ràng buộc với nhiều công việc.
Đây là những gì sẽ xảy ra khi một lịch biểu được đính kèm với nhiều công việc:
EXEC sp_help_jobschedule
@schedule_id = 14;
Kết quả:
Msg 14369, Level 16, State 1, Procedure sp_help_jobschedule, Line 69 [Batch Start Line 22] The schedule ID "14" is used by more than one job. Specify the job_id.
Và mặc dù nó yêu cầu chỉ định job_id
, nếu bạn làm điều này, bạn sẽ cần xóa schedule_id
(như đã đề cập, nếu bạn vượt qua schedule_id
, bạn không thể bao gồm job_name
hoặc job_id
).
Để chứng minh điều này, nếu tôi chỉ cần thêm job_id
và giữ schedule_id
ở đó, tôi gặp lỗi sau.
EXEC sp_help_jobschedule
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8',
@schedule_id = 14;
Kết quả:
Msg 14273, Level 16, State 1, Procedure sp_help_jobschedule, Line 51 [Batch Start Line 22] You must provide either @job_id or @job_name (and, optionally, @schedule_name), or @schedule_id.
Bao gồm Mô tả
Một điều khác bạn có thể làm là chỉ định xem có đưa vào mô tả của lịch trình hay không.
Theo mặc định, mô tả không được bao gồm trong tập kết quả. Trên thực tế, schedule_description
cột là bao gồm, nhưng nó không chứa mô tả, trừ khi bạn yêu cầu rõ ràng. Nếu bạn không yêu cầu, hãy schedule_description
cột hiển thị (Description not requested.)
.
@include_description
tham số là bit , với giá trị mặc định là 0
, có nghĩa là nó không hiển thị mô tả. Chuyển giá trị 1
kết quả là mô tả được hiển thị.
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest',
@include_description = 1;