Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

4 cách để lấy danh sách lịch biểu trong SQL Server Agent (T-SQL)

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ới sysjobschedulessysjobs_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ư sysjobschedulessysjobs_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ứ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tắt tất cả các trình kích hoạt trong cơ sở dữ liệu SQL Server

  2. Sử dụng Tìm kiếm Toàn văn trong SQL Server 2008 trên nhiều bảng, cột

  3. Cú pháp không chính xác gần từ khóa 'with' ... câu lệnh trước đó phải được kết thúc bằng dấu chấm phẩy

  4. Hồ sơ truy vấn 101 - Có, nó thực sự có thể cải thiện hiệu suất máy chủ SQL của bạn

  5. SQL Server - Khám phá nội bộ của sp_spaceused