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

3 cách trả về danh sách công việc tác nhân máy chủ SQL (T-SQL)

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_idstep_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.


  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 thay đổi định dạng ngày hiện tại trong SQL Server (T-SQL)

  2. SQL Server:Tôi có nên sử dụng bảng information_schema trên bảng sys không?

  3. EXCEPT có thực thi nhanh hơn JOIN không khi các cột trong bảng giống nhau

  4. Bắt Hibernate và SQL Server để chơi tốt với VARCHAR và NVARCHAR

  5. Có thể sử dụng SqlGeography với Linq to Sql không?