• 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)

    WHEREDeleted=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