The loop continues until the task succeeds or @MaxAttempts is reached.
If @MaxAttempts is reached and the task still fails, an email is sent
BEGIN
SET NOCOUNT ON
DECLARE @MaxAttempts INT
DECLARE @Counter INT
DECLARE @CounterText VARCHAR(30)
DECLARE @ErrorMessage NVARCHAR(4000)
DECLARE @ErrorSeverity INT
DECLARE @EmailMessage VARCHAR(100)
SET @ErrorMessage = 'run_attempt'
SET @Counter = 0
SET @maxAttempts = 3
-- @ErrorMessage will be NULL after a successful execution of the program.
-- Checking for IS NOT NULL will mean the loop continues until success.
WHILE (@ErrorMessage IS NOT NULL) AND (@ErrorMessage NOT LIKE 'Warning: Null value%') AND (@Counter <= @MaxAttempts )
BEGIN
-- Increment counter and display run number to the screen
SELECT @Counter = @Counter + 1
SET @CounterText = CONVERT(VARCHAR(30),@Counter,23)
RAISERROR (@CounterText, 10, 1) WITH NOWAIT
BEGIN TRY
-- Run the program you want to 'retry'
EXEC myschema.mystoredProc
SELECT @ErrorMessage = ERROR_MESSAGE() , @ErrorSeverity = ERROR_SEVERITY()
END TRY
BEGIN CATCH
IF @Counter = @MaxAttempts
BEGIN
SET @EmailMessage = 'mystoredProc : Run Attempt : ' + CONVERT(VARCHAR(30),@Counter,23) + ' failed '
EXEC msdb.dbo.sp_send_dbmail
@profile_name='SQL Profile'
, @recipients='recipent@domain.com'
, @body=@EmailMessage
, @subject=@EmailMessage
, @importance='High'
END
END CATCH
END
END
No comments:
Post a Comment