Tôi có một DB trung tâm mà tôi viết kết quả công việc trên tất cả các máy chủ của tôi trở lại. Tôi chuyển 3 tham số qua powershell trong công việc SQL trở lại sp trên máy chủ trung tâm để xác minh công việc sẽ chạy vào thời điểm đó, v.v. Thông tin sau đó được hiển thị qua SSRS để chúng tôi có thể thấy một công việc thất bại / công việc chạy dài / & các công việc không chạy nhưng nên có (hoặc nếu ai đó làm hỏng lịch trình).
Để làm điều này, tôi có 2 bước công việc được thêm vào mỗi công việc trên mỗi máy chủ và tôi muốn giảm tập lệnh xuống chỉ còn 1 bước cho mỗi công việc..có thể gọi nó từ chia sẻ mạng ..
Nhưng vấn đề của tôi là một trong 3 thông số tôi vượt qua. Tôi cần phải nhận được lệnh thực thi hoặc tên công việc từ bên trong lệnh thực thi để tôi không phải mã hóa tham số tên. 3 thông số tôi vượt qua là jobid, status (thành công / thất bại), errormsg. Kịch bản powershell tôi đã viết là khá đơn giản.
Gọi invoke
Điều này viết những gì tôi cần để bàn. Tôi đã xem msdb.dbo.sp_help_job / msdb.dbo.sp_get_compoz_job_info / dbo.xp_sqlagent_enum_jobs / nhưng không ai trong số này sẽ đảm bảo tôi nhận được ID hoặc tên của công việc thực thi chính xác trong trường hợp có nhiều hơn 1 công việc thực thi cùng lúc.
Tôi thậm chí đã thử xem sys.sys Processes nhưng tôi nghĩ vì công việc tác nhân là tập lệnh powershell, nó hiển thị là ".Net SqlClient Data Carrier" vì vậy tôi không thể cắt JOBID nhị phân khỏi các công việc hiển thị là "SQLAgent - TSQL JobStep (Công việc 0xF1800243164745429C30474FFD5C990C: Bước 1) "--- điều này tôi đã học được từ bài viết của Denny cherry - cảm ơn denny-
Bất kỳ ý tưởng nào về cách lấy jobid thực thi sẽ được đánh giá rất cao.
Cảm ơn,
Chris