TRY..CATCH Syntax
- BEGIN TRY
- --T-SQL statements
- --or T-SQL statement blocks
- END TRY
- BEGIN CATCH
- --T-SQL statements
- --or T-SQL statement blocks
- END CATCH
Error Functions used within CATCH block
-
ERROR_NUMBER()
This returns the error number and its value is same as for @@ERROR function.
-
ERROR_LINE()
This returns the line number of T-SQL statement that caused error.
-
ERROR_SEVERITY()
This returns the severity level of the error.
-
ERROR_STATE()
This returns the state number of the error.
-
ERROR_PROCEDURE()
This returns the name of the stored procedure or trigger where the error occurred.
-
ERROR_MESSAGE()
This returns the full text of error message. The text includes the values supplied for any substitutable parameters, such as lengths, object names, or times.
Exception handling example
- BEGIN TRY
- DECLARE @num INT, @msg varchar(200)
- ---- Divide by zero to generate Error
- SET @num = 5/0
- PRINT 'This will not execute'
- END TRY
- BEGIN CATCH
- PRINT 'Error occured that is'
- set @msg=(SELECT ERROR_MESSAGE())
- print @msg;
- END CATCH
- GO
- BEGIN TRY
- DECLARE @num INT
- ---- Divide by zero to generate Error
- SET @num = 5/0
- PRINT 'This will not execute'
- END TRY
- BEGIN CATCH
- SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage;
- END CATCH;
- GO
Note
- A TRY..CATCH block combination catches all the errors that have a severity between 11 and 19.
- The CATCH block is executed only if there is an error occurs in T-SQL statements within TRY block otherwise the CATCH block is ignored.
- Each TRY block is associated with only one CATCH block and vice versa
- TRY and CATCH blocks can’t be separated with the GO statement. We need to put both TRY and CATCH blocks within the same batch.
- TRY..CATCH blocks can be used with transactions. We check the number of open transactions by using @@TRANCOUNT function in Sql Server.
- XACT_STATE function within the TRY..CATCH block can be used to check whether a open transaction is committed or not. It will return -1 if transaction is not committed else returns 1.