|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Monday, January 07, 2013 6:12 AM
Points: 4,
Visits: 18
|
|
Hello,
I have the following stored procedure that runs as a job:
CREATE PROCEDURE [dbo].[proc_Master_Schedule] AS
set XACT_ABORT ON
DECLARE @Count INT DECLARE @LoopCount INT DECLARE @ProgramID INT DECLARE @strMessage NVARCHAR(MAX) DECLARE @subject NVARCHAR(MAX)
SELECT IDENTITY(INT,1,1) ID, [ProgramID] INTO #tmpProgram FROM dbo.Schedule_Setup WITH (NOLOCK) WHERE Deleted=0
SELECT @Count = @@RowCount SET @LoopCount = 1
WHILE @LoopCount <= @Count BEGIN SELECT @ProgramID=ProgramID FROM #tmpProgram WHERE ID = @LoopCount
EXEC dbo.proc_Schedules @ProgramID
IF @@Error <> 0
SET @Message = 'The Schedule for Program ' + CONVERT(NVARCHAR,@ProgramID) + 'failed.'
exec Master.dbo.sp_sendSAM @recipients='Dev.Team@test.com', @subject='proc_Master_Schedule failure', @sender_email = 'SQL2008@test.com', @Message = @Message, @format ='html' END
SET @LoopCount=@LoopCount + 1 END
DROP TABLE #tmpProgram
I would like the job to continue to run when there is a failure in executing the stored procedure for any of the ProgramIDs and also send an email that it failed for that specific ProgramID. So should the procedure fail for one ProgramID, then skip to the next ProgramID and notify. Also I need to have better error handling.
Any help with regards to this matter will be greatly appreciated.
Thank you.
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Today @ 10:16 AM
Points: 151,
Visits: 1,033
|
|
Remove set XACT_ABORT ON and implement TRY CATCH http://msdn.microsoft.com/en-us/library/ms175976%28v=sql.100%29.aspx, so this proc should looks like (I can't test it so first test it):
CREATE PROCEDURE [dbo].[proc_Master_Schedule] AS
-- set XACT_ABORT ON --line to remove
DECLARE @Count INT DECLARE @LoopCount INT DECLARE @ProgramID INT DECLARE @strMessage NVARCHAR(MAX) DECLARE @subject NVARCHAR(MAX)
SELECT IDENTITY(INT,1,1) ID, [ProgramID] INTO #tmpProgram FROM dbo.Schedule_Setup WITH (NOLOCK) WHERE Deleted=0
SELECT @Count = @@RowCount SET @LoopCount = 1
WHILE @LoopCount <= @Count BEGIN SELECT @ProgramID=ProgramID FROM #tmpProgram WHERE ID = @LoopCount --TRY CATCH block BEGIN TRY EXEC dbo.proc_Schedules @ProgramID END TRY BEGIN CATCH
SET @Message = 'The Schedule for Program ' + CONVERT(NVARCHAR,@ProgramID) + 'failed.'
exec Master.dbo.sp_sendSAM @recipients='Dev.Team@test.com', @subject='proc_Master_Schedule failure', @sender_email = 'SQL2008@test.com', @Message = @Message, @format ='html' END CATCH; --end of TRY CATCH block
SET @LoopCount=@LoopCount + 1 END
DROP TABLE #tmpProgram
|
|
|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Monday, January 07, 2013 6:12 AM
Points: 4,
Visits: 18
|
|
Thanks for your reply.
The TRY...CATCH block worked so when the stored procedure failed for one program then it skipped to the next one and sent the email. I also used the Error Functions from Try...Catch to print the error no, proc name and error message.
Once again thank you for your suggestion.
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Today @ 10:16 AM
Points: 151,
Visits: 1,033
|
|
I'm glad I could help
|
|
|
|