Quantcast
Channel: SQLServerCentral » SQL Server 2014 » Development - SQL Server 2014 » Latest topics
Viewing all articles
Browse latest Browse all 3145

Error handling in while loop...skip if failure

$
0
0
Hi,I have the following master stored procedure where execute other store procedures one by one and send an emails after complete each one and when it fail it send an email too and stop there. Now, i want to continue to the next alert store procedure if failed but i don't know how to do that: HELP!!!![code="sql"]BEGIN SET ANSI_WARNINGS OFF DECLARE @AlertProcedure VARCHAR(100) ,@min_AlertProcedure INT ,@max_AlertProcedure INT ,@RunDate VARCHAR(10) = '2015/09/30' ,@ErrorMessage VARCHAR(200) ,@ErrorNumber VARCHAR(50) ,@ErrorProcedure VARCHAR(200) ,@ErrorLine VARCHAR(50) ,@StaticSQL VARCHAR(250) ,@report_id INT ,@rpt_shortname VARCHAR(50) ,@name1 VARCHAR(50) ,@name2 VARCHAR(50) ,@name3 VARCHAR(50) ,@name4 VARCHAR(50) ,@name5 VARCHAR(50) ,@name6 VARCHAR(50) ,@name7 VARCHAR(50) ,@name8 VARCHAR(50) ,@name9 VARCHAR(50) ,@par1 VARCHAR(50) ,@par2 VARCHAR(50) ,@par3 VARCHAR(50) ,@par4 VARCHAR(50) ,@par5 VARCHAR(50) ,@par6 VARCHAR(50) ,@par7 VARCHAR(50) ,@par8 VARCHAR(50) ,@par9 VARCHAR(50) ,@Today DATE ,@short_name VARCHAR(25) ,@agency_id VARCHAR(2) ,@max_agency_id VARCHAR(50) BEGIN TRY SELECT @min_AlertProcedure = min(report_id) ,@max_AlertProcedure = max(report_id) FROM alert WHILE ( @min_AlertProcedure IS NOT NULL AND @min_AlertProcedure <= @max_AlertProcedure ) BEGIN SELECT @AlertProcedure = alert_procedure FROM REPORT R INNER JOIN ALERT A ON R.report_id = A.report_id WHERE R.report_id = @min_AlertProcedure SELECT DISTINCT @agency_id = MIN(Roles.Agency_id) ,@max_agency_id = MAX(Roles.Agency_id) FROM Report INNER JOIN report_roles ON Report.Report_id = report_roles.report_id INNER JOIN [dbo].[roles] ON report_roles.role_id = Roles.role_id INNER JOIN [dbo].[alert] ON Report.report_id = Alert.report_id WHERE Report.report_id = @min_AlertProcedure AND ( Roles.Inactive_date IS NULL OR LEN(LTRIM(RTRIM(Roles.Inactive_date))) = 0 ) AND Roles.Agency_id IS NOT NULL AND active = 1 WHILE ( @agency_id IS NOT NULL AND @agency_id <= @max_agency_id ) BEGIN SELECT @short_name = short_name FROM agency WHERE agency_id = @agency_id SELECT @report_id = r.report_id ,@rpt_shortname = rpt_shortname ,@name1 = MAX(CASE WHEN i.ordinal_position = 1 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 1 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name2 = MAX(CASE WHEN i.ordinal_position = 2 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 2 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name3 = MAX(CASE WHEN i.ordinal_position = 3 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 3 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name4 = MAX(CASE WHEN i.ordinal_position = 4 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 4 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name5 = MAX(CASE WHEN i.ordinal_position = 5 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 5 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name6 = MAX(CASE WHEN i.ordinal_position = 6 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 6 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name7 = MAX(CASE WHEN i.ordinal_position = 7 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 7 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name8 = MAX(CASE WHEN i.ordinal_position = 8 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 8 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) ,@name9 = MAX(CASE WHEN i.ordinal_position = 9 AND DATA_TYPE NOT IN ( 'date' ,'datetime' ) THEN REPLACE(parameter_name, '@', '') WHEN i.ordinal_position = 9 AND DATA_TYPE IN ( 'date' ,'datetime' ) THEN CONVERT(VARCHAR(10), @RunDate, 112) ELSE '' END) FROM INFORMATION_SCHEMA.PARAMETERS i INNER JOIN alert a ON SPECIFIC_NAME = a.alert_procedure INNER JOIN report rr ON a.report_id = rr.report_id INNER JOIN parameter_report r ON a.report_id = r.report_id INNER JOIN parameter p ON r.parameter_id = p.parameter_id WHERE SPECIFIC_NAME = @AlertProcedure AND p.parm_type_id = '2' GROUP BY r.report_id ,rpt_shortname ,SPECIFIC_NAME ORDER BY r.report_id SELECT @par1 = CASE WHEN @name1 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name1 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name1 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name1 THEN value ELSE '' END )) END ) END ) END ,@par2 = CASE WHEN @name2 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name2 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name2 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name2 THEN value ELSE '' END )) END ) END ) END ,@par3 = CASE WHEN @name3 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name3 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name3 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name3 THEN value ELSE '' END )) END ) END ) END ,@par4 = CASE WHEN @name4 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name4 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name4 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name4 THEN value ELSE '' END )) END ) END ) END ,@par5 = CASE WHEN @name5 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name5 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name5 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name5 THEN value ELSE '' END )) END ) END ) END ,@par6 = CASE WHEN @name6 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name6 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name6 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name6 THEN value ELSE '' END )) END ) END ) END ,@par7 = CASE WHEN @name7 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name7 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name7 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name7 THEN value ELSE '' END )) END ) END ) END ,@par8 = CASE WHEN @name8 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name8 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name8 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name8 THEN value ELSE '' END )) END ) END ) END ,@par9 = CASE WHEN @name9 = 'year_h' THEN CONVERT(VARCHAR(4), @RunDate, 112) ELSE ( CASE WHEN @name9 = 'agency_id' THEN @agency_id ELSE ( CASE WHEN @name9 = @RunDate THEN CHAR(39) + CONVERT(VARCHAR(10), @RunDate, 112) + CHAR(39) ELSE max(( CASE WHEN NAME = @name9 THEN value ELSE '' END )) END ) END ) END FROM parameter_report r INNER JOIN parameter p ON r.parameter_id = p.parameter_id WHERE report_id = @report_id AND p.Agency = @agency_id AND p.parm_type_id = '2' GROUP BY report_id IF ( @par1 = ' ' OR @par1 IS NULL ) BEGIN SET @par1 = '' END ELSE BEGIN SET @par1 = @par1 + ', ' END IF ( @par2 = ' ' OR @par2 IS NULL ) BEGIN SET @par2 = '' END ELSE BEGIN SET @par2 = @par2 + ', ' END IF ( @par3 = ' ' OR @par3 IS NULL ) BEGIN SET @par3 = '' END ELSE BEGIN SET @par3 = @par3 + ', ' END IF ( @par4 = ' ' OR @par4 IS NULL ) BEGIN SET @par4 = '' END ELSE BEGIN SET @par4 = @par4 + ', ' END IF ( @par5 = ' ' OR @par5 IS NULL ) BEGIN SET @par5 = '' END ELSE BEGIN SET @par5 = @par5 + ', ' END IF ( @par6 = ' ' OR @par6 IS NULL ) BEGIN SET @par6 = '' END ELSE BEGIN SET @par7 = @par7 + ', ' END IF ( @par8 = ' ' OR @par8 IS NULL ) BEGIN SET @par8 = '' END ELSE BEGIN SET @par8 = @par8 + ', ' END IF ( @par9 = ' ' OR @par9 IS NULL ) BEGIN SET @par9 = '' END ELSE BEGIN SET @par9 = @par9 + ', ' END IF NOT EXISTS ( SELECT * FROM tbl_contol_process_table WHERE proc__name = @AlertProcedure AND run_date = CAST(@RunDate AS DATE) AND note_desc = 'Step-1:success update' AND process_id = 3 AND status_id = 1 AND agency_id = @agency_id ) BEGIN SET @StaticSQL = @AlertProcedure + CHAR(32) + @par1 + @par2 + @par3 + @par4 + @par5 + @par6 + @par7 + @par8 + @par9 + ',' SET @StaticSQL = ( SELECT REPLACE((@StaticSQL), ', ,', '') ) PRINT (@StaticSQL) EXEC (@StaticSQL) INSERT INTO tbl_contol_process_table ( proc__name ,run_date ,run_date_time ,note_desc ,process_id ,status_id ,agency_id ) VALUES ( @AlertProcedure ,@RunDate ,GETDATE() ,'Step-1:success update' ,3 ,1 ,@agency_id ) IF EXISTS ( SELECT * FROM tbl_contol_process_table WHERE proc__name = @AlertProcedure AND run_date = CAST(@RunDate AS DATE) AND note_desc = 'Step-1:success update' AND process_id = 3 AND status_id = 1 AND agency_id = @agency_id ) BEGIN SET @Today = CAST(GETDATE() AS DATE) EXEC dbo.sp_AlertMailer @short_name ,@agency_id ,@rpt_shortname ,@Today ,'Alert has been Triggered in EBT DW' ,1 ,'acolon@someemail.com' ,@par1 ,@par2 ,@par3 ,@par4 ,@par5 ,@par6 ,@par7 ,@par8 ,@par9 END END IF (@@ROWCOUNT = 0) BEGIN SET @agency_id = ( SELECT DISTINCT TOP 1 Roles.agency_id FROM Report INNER JOIN report_roles ON Report.Report_id = report_roles.report_id INNER JOIN [dbo].[roles] ON report_roles.role_id = Roles.role_id INNER JOIN [dbo].[alert] ON Report.report_id = Alert.report_id WHERE Report.report_id = @min_AlertProcedure AND ( Roles.Inactive_date IS NULL OR LEN(LTRIM(RTRIM(Roles.Inactive_date))) = 0 ) AND Roles.Agency_id IS NOT NULL AND active = 1 AND Roles.Agency_id > @agency_id ) CONTINUE END SET @agency_id = ( SELECT DISTINCT TOP 1 Roles.agency_id FROM Report INNER JOIN report_roles ON Report.Report_id = report_roles.report_id INNER JOIN [dbo].[roles] ON report_roles.role_id = Roles.role_id INNER JOIN [dbo].[alert] ON Report.report_id = Alert.report_id WHERE Report.report_id = @min_AlertProcedure AND ( Roles.Inactive_date IS NULL OR LEN(LTRIM(RTRIM(Roles.Inactive_date))) = 0 ) AND Roles.Agency_id IS NOT NULL AND active = 1 AND Roles.Agency_id > @agency_id ) END IF (@@ROWCOUNT = 0) BEGIN SET @min_AlertProcedure = ( SELECT TOP 1 report_id FROM alert WHERE report_id > @min_AlertProcedure ) CONTINUE END SET @min_AlertProcedure = ( SELECT TOP 1 report_id FROM alert WHERE report_id > @min_AlertProcedure ) END END TRY BEGIN CATCH SELECT @ErrorNumber = ERROR_NUMBER() ,@ErrorMessage = ERROR_MESSAGE() ,@ErrorLine = ERROR_LINE() INSERT INTO tbl_contol_process_table ( proc__name ,run_date ,run_date_time ,note_desc ,process_id ,status_id ,agency_id ) VALUES ( @AlertProcedure ,@RunDate ,GETDATE() ,'Step-1:' + @ErrorNumber + ':' + @ErrorLine + ':' + @ErrorMessage ,3 ,0 ,@agency_id ) SET @Today = CAST(GETDATE() AS DATE) EXEC dbo.sp_AlertMailerFailed @short_name ,@agency_id ,@rpt_shortname ,@Today ,'Alert has been Failed in EBT_DW' ,1 ,'acolon@someemail.com' ,@par1 ,@par2 ,@par3 ,@par4 ,@par5 ,@par6 ,@par7 ,@par8 ,@par9 END CATCH EXEC [dbo].[sp_control_dashboard_alerts] @RunDate ,0END[/code]

Viewing all articles
Browse latest Browse all 3145

Trending Articles