This is generic Error Handler I use for my Adhoc Scripts as Well as functions, stored procedures,etc.
-- Adding the error message. USE master; GO EXEC sp_addmessage 50001, 16, N'The Record doesn''t exist. Parameter : %s , Value : %s',@replace='Replace'; GO -- Standard Variables Declarations DECLARE @ErrorMessage NVARCHAR(4000), @ErrorNumber INT, @ErrorSeverity INT, @ErrorState INT, @ErrorLine INT, @ErrorProcedure NVARCHAR(200), @ErrParameter NVARCHAR(255), @ErrParameterValue NVARCHAR(255) -- Stored Procedure Specific Variables Declarations DECLARE @pUserName NVARCHAR(50) SELECT @ErrorNumber = ERROR_NUMBER(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(), @ErrorLine = ERROR_LINE(), @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-'); SELECT @pUserName = username FROM ps.User_ WITH (NOLOCK) WHERE UserID = @pUserID AND IsActive = 1 IF @pUserName IS NULL BEGIN SELECT @ErrorNumber = 50001 , @ErrorSeverity = 16 , @ErrorState = 1 , @ErrorLine = ERROR_LINE(), @ErrParameter = '@pUserID', @ErrParameterValue = CONVERT(VARCHAR(50) , @pUserID) , @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-'); GOTO ErrorHandler END GOTO ExitScript ErrorHandler: -- Use RAISERROR inside the CATCH block to return error -- information about the original error that caused -- execution to jump to the CATCH block. RAISERROR ( @ErrorNumber, @ErrorSeverity, @ErrorState, -- parameter: original error state. @ErrParameter, -- '@pUserID', @ErrParameterValue ); ExitScript: END
Common Error Handling Stored Procedure
-- Check to see whether this stored procedure exists. IF OBJECT_ID (N'common.GetErrorInfo', N'P') IS NOT NULL DROP PROCEDURE common.GetErrorInfo; GO -- Create procedure to retrieve error information. CREATE PROCEDURE common.GetErrorInfo AS SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_LINE () AS ErrorLine ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_MESSAGE() AS ErrorMessage; GO EXEC common.GetErrorInfo -- SET XACT_ABORT ON will cause the transaction to be uncommittable -- when the constraint violation occurs. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- statement will generate a error. SELECT 1/0 AS [1/0 Error] COMMIT TRANSACTION; END TRY BEGIN CATCH -- Execute error retrieval routine. EXECUTE common.GetErrorInfo; -- Test XACT_STATE: -- If 1, the transaction is committable. -- If -1, the transaction is uncommittable and should -- be rolled back. -- XACT_STATE = 0 means that there is no transaction and -- a commit or rollback operation would generate an error. -- Test whether the transaction is uncommittable. IF (XACT_STATE()) = -1 BEGIN PRINT N'The transaction is in an uncommittable state.' + 'Rolling back transaction.' ROLLBACK TRANSACTION; END; -- Test whether the transaction is committable. IF (XACT_STATE()) = 1 BEGIN PRINT N'The transaction is committable.' + 'Committing transaction.' COMMIT TRANSACTION; END; END CATCH; GO