ฉันมีฐานข้อมูลกลางที่ฉันเขียนผลลัพธ์งานบนเซิร์ฟเวอร์ทั้งหมดของฉันกลับไป ฉันส่งพารามิเตอร์ 3 ตัวผ่าน powershell ในงาน SQL กลับไปที่ sp บนเซิร์ฟเวอร์กลางที่ตรวจสอบว่างานควรจะทำงานในเวลานั้น ฯลฯ ข้อมูลจะถูกเปิดเผยผ่าน SSRS เพื่อให้เราเห็นงานล้มเหลว / งานที่ต้องทำงานนาน / & งานที่ไม่ได้ทำงาน แต่ควรมี (หรือถ้ามีคนยุ่งกับตาราง)
ในการทำเช่นนี้ฉันมี 2 ขั้นตอนงานในแต่ละงานบนเซิร์ฟเวอร์ทุกเครื่องและฉันต้องการลดสคริปต์ลงเหลือเพียง 1 ขั้นตอนในแต่ละงาน .. อาจเป็นไปได้ที่จะโทรหาจากเครือข่ายที่ใช้ร่วมกัน ..
แต่ปัญหาของฉันคือหนึ่งในสามพารามิเตอร์ที่ฉันผ่าน ฉันต้องการรับ jobid ที่กำลังเรียกใช้หรือชื่องานจากภายในงานที่กำลังดำเนินการดังนั้นฉันไม่ต้อง hardcode พารามิเตอร์ name 3 พารามิเตอร์ที่ฉันผ่านคือ jobid สถานะ (สำเร็จ / ล้มเหลว), errormsg สคริปต์ powershell ที่ฉันเขียนนั้นค่อนข้างตรงไปตรงมา
เรียกใช้-sqlcmd -ServerInstance "MYRemoteSYSTEM" - ฐานข้อมูล remoteDB - แบบสอบถาม "exec dbo.JOB_LOG 'JOBNAME / ID', 'Success / FAIL', 'BAD MESSAGE HERE'"
สิ่งนี้เขียนสิ่งที่ฉันต้องการลงในตาราง ฉันได้ดู msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / แต่ไม่มีสิ่งใดที่จะรับประกันได้ว่าฉันได้รับ ID หรือชื่อของงานที่ถูกต้องในกรณีที่มีงานมากกว่า 1 งาน ในเวลาเดียวกัน
ฉันเคยลองดูที่ sys.sysprocesses แต่ฉันคิดว่าเนื่องจากงานตัวแทนเป็นสคริปต์ PowerShell ก็แสดงเป็น ".Net SqlClient Data Provider" ดังนั้นฉันจึงไม่สามารถตัด JOBID ไบนารีออกจากงานที่แสดงเป็น "SQLAgent - TSQL JobStep (งาน 0xF1800243164745429C30474FFD5C990C: ขั้นตอนที่ 1) "--- สิ่งนี้ฉันเรียนรู้จากโพสต์ของ Denny cherry - ขอบคุณ denny-
ความคิดใด ๆ เกี่ยวกับวิธีการคว้า jobid การดำเนินการจะได้รับการชื่นชมอย่างมาก
ขอบคุณ
คริส