हम एक रात काम प्रसंस्करण सबसिस्टम के हिस्से के रूप नीचे कोड की तरह कुछ करना - यह यह वास्तव में वास्तव में तुलना में अधिक जटिल है, उदाहरण के लिए हम नौकरियों के कई अन्योन्याश्रित सेट कार्रवाई कर रहे हैं, और विन्यास तालिकाओं से काम के नाम और टाइमआउट मानों में पढ़ा - लेकिन इस विचार को दर्शाता है:
DECLARE @JobToRun NVARCHAR(128) = 'My Agent Job'
DECLARE @dtStart DATETIME = GETDATE(), @dtCurr DATETIME
DECLARE @ExecutionStatus INT, @LastRunOutcome INT, @MaxTimeExceeded BIT = 0
DECLARE @TimeoutMinutes INT = 180
EXEC msdb.dbo.sp_start_job @JobToRun
SET @dtCurr = GETDATE()
WHILE 1=1
BEGIN
WAITFOR DELAY '00:00:10'
SELECT @ExecutionStatus=current_execution_status, @LastRunOutcome=last_run_outcome
FROM OPENQUERY(LocalServer, 'set fmtonly off; exec msdb.dbo.sp_help_job') where [name] = @JobToRun
IF @ExecutionStatus <> 4
BEGIN -- job is running or finishing (not idle)
SET @dtCurr=GETDATE()
IF DATEDIFF(mi, @dtStart, @dtCurr) > @TimeoutMinutes
BEGIN
EXEC msdb.dbo.sp_stop_job @[email protected]
-- could log info, raise error, send email etc here
END
ELSE
BEGIN
CONTINUE
END
END
IF @LastRunOutcome = 1 -- the job just finished with success flag
BEGIN
-- job succeeded, do whatever is needed here
print 'job succeeded'
END
END
+1 काम संपादक में कोई स्पष्ट "टाइमआउट" संपत्ति नहीं है। मुझे दिलचस्पी है कि लोग क्या करते हैं। – Tomalak
मुझे लगता है कि आपको SQL में WAITFOR-type सेटिंग में जोड़ना होगा। –