USE MASTER
GO
IF OBJECT_ID('sp_ErrorHandler') IS NULL
EXEC('CREATE PROCEDURE sp_ErrorHandler AS SELECT 1 AS ID')
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE sp_ErrorHandler
@ErrorNumber INT = NULL OUTPUT,
@ErrorSeverity INT = NULL OUTPUT,
@ErrorState INT = NULL OUTPUT,
@ErrorProcedure VARCHAR(256) = NULL OUTPUT,
@ErrorLine INT = NULL OUTPUT,
@ErrorMessage VARCHAR(8000) = NULL OUTPUT,
@FullErrorMessage VARCHAR(MAX) = NULL OUTPUT,
@RaiseError BIT = 0,
@PrintError BIT = 0
AS
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT @ErrorNumber = ERROR_NUMBER(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorProcedure = ERROR_PROCEDURE(),
@ErrorLine = ERROR_LINE(),
@ErrorMessage = ERROR_MESSAGE(),
@FullErrorMessage = 'Msg ' + ISNULL(CAST(@ErrorNumber AS VARCHAR), 'N/A') + ', Level '
+ ISNULL(CAST(@ErrorSeverity AS VARCHAR), 'N/A') + ', State ' + ISNULL(CAST(@ErrorState AS VARCHAR), 'N/A')
+ ', Line ' + ISNULL(CAST(@ErrorLine AS VARCHAR), 'N/A') + ISNULL(', Procedure ' + @ErrorProcedure, '')
+ ISNULL('
' + @ErrorMessage, '')
IF @PrintError = 1
PRINT @FullErrorMessage
IF @RaiseError = 1
AND @ErrorNumber IS NOT NULL
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
RETURN 0
GO
EXEC sys.sp_ms_marksystemobject
sp_ErrorHandler
GO