Error Handling
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Etibar Vazirov
CS instructor at UFAZ
Slides’ credit: Mariam Antona
Topics will be covered
Error handling
Transactions
Concurrency in transactions
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Dataset: Electric bike store
Products
| product_id | product_name | stock | price |
| | | | |
| 1 | Trek Conduit+ - 2016 | 50 | 2999.99 |
| 2 | Sun Bicycles ElectroLite - 2017 | 47 | 1559.99 |
| 3 | Trek Powerfly 8 FS Plus - 2017 | 41 | 4999.99 |
| 4 | Trek Conduit+ - 2018 | 10 | 2799.99 |
| 5 | Trek CrossRip+ - 2018 | 12 | 4499.99 |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Dataset: Electric bike store
B uy ers
| buyer_id | first_name | last_name | email | phone |
| | | | | |
| 1 | Dylan | Smith |
[email protected] | 555888999 |
| 2 | John | Antona |
[email protected] | 555111222 |
| 3 | Astrid | Harper |
[email protected] | 555000999 |
| 4 | Angus | Brown |
[email protected] | 555222012 |
| 5 | David | Elcano |
[email protected] | 555602314 |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Dataset: Electric bike store
Staff
| staff_id | first_name | last_name | email | phone |
| | | | | |
| 1 | Mohammed | Ferrec |
[email protected] | 555888111 |
| 2 | Dimitri | Brown |
[email protected] | 555012012 |
| 3 | Leila | Merheg |
[email protected] | 555999133 |
| 4 | Mateo | Casanovas |
[email protected] | 555110996 |
| 5 | Carl | York |
[email protected] | 555010011 |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Dataset: Electric bike store
Orders
| order_id | product_id | buyer_id | staff_id | price | order_date |
| | | | | | |
| 1 | 2 | 1 | 5 | 100 | 1559.99 |
| 2 | 2 | 5 | 5 | 100 | 1559.99 |
| 3 | 5 | 10 | 1 | 100 | 4499.99 |
| 4 | 10 | 3 | 3 | 100 | 2799.99 |
| 5 | 15 | 2 | 7 | 100 | 2299.99 |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Getting an error
| product_id | product_name | stock | price |
| | | | |
| 19 | Trek Powerfly 5 - 2018 | 15 | 3499.99 |
CONSTRAINT unique_product_name UNIQUE (product_name);
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Violation of UNIQUE KEY constraint 'unique_product_name'.
Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
The TRY...CATCH syntax
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
Enclose y our statements within the TRY block
Place y our error handling code within the CATCH block
Error in the TRY block -> the CATCH block takes the control
No error in the TRY block -> the CATCH block is skipped
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Example with TRY...CATCH
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH
| message |
| |
| An error occurred! You are in the CATCH block |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Example with TRY...CATCH
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Super new Trek Powerfly', 5, 1499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH
| message |
| |
| Product inserted correctly! |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Nesting TRY...CATCH
BEGIN TRY | message |
INSERT INTO products (product_name, stock, price) |-------------------------------------------|
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99); | An error occurred inserting the product! |
SELECT 'Product inserted correctly!' AS message; | You are in the first CATCH block |
END TRY
BEGIN CATCH | message |
SELECT 'An error occurred inserting the product! |-------------------------------------------|
You are in the first CATCH block' AS message; | An error occurred inserting the error! |
BEGIN TRY | You are in the second CATCH block |
INSERT INTO myErrors
VALUES ('ERROR!');
SELECT 'Error inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred inserting the error!
You are in the second CATCH block' AS message;
END CATCH
END CATCH
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Error anatomy and
uncatchable errors
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Etibar
Miriam Vazirov
Antona
CS instructor at UFAZ
So ware Engineer
Slides’ credit: Mariam Antona
Error anatomy
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'.
Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error anatomy
Error number
SQL errors: 1 to 49999
Own errors: starting from 50001
select * from sys.messages
| message_id | language_id | severity | ... | text |
| | | | | |
| ... | ... | ... | ... | ... |
| 2627 | 1033 | 14 | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ... | ... | ... | ... | ... |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error anatomy
Severity level
0-10: informational messages
11-16: errors that can be corrected by the user (constraint violation, etc.)
17-24: other errors (so ware problems, fatal errors)
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error anatomy
State
1: if SQL Server displa ys error
0-255: own errors
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error anatomy
Line
Procedure
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Uncatchable errors
Severity lower than 11(11-19 are catchable)
Severity of 20 or higher that stop the connection
Compilation errors: objects and columns that don't exist
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Uncatchable errors - Compilation error example
BEGIN TRY
SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
SELECT 'You are in the CATCH block' AS message;
END CATCH
Msg 207, Level 16, State 1, Line 2
Invalid column name 'non_existent_column'.
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Giving information
about errors
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R
Etibar
Miriam Vazirov
Antona
CS instructor at UFAZ
So ware Engineer
Slides’ credit: Mariam Antona
Getting an error - review
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'.
Cannot insert duplicate key in object 'dbo.products'.
The duplicate key value is (Trek Powerfly 5 - 2018).
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Getting an error - review
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH
| message |
| |
| An error occurred! You are in the CATCH block |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error functions
ERROR_NUMBER() returns the number of the error.
ERROR_SEVERITY() returns the error severity (11-19).
ERROR_STATE() returns the state of the error.
ERROR_LINE() returns the number of the line of the error.
ERROR_PROCEDURE() returns the name of stored procedure/trigger. NULL if there is not stored
procedure/trigger.
ERROR_MESSAGE() returns the text of the error message.
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error functions - examples
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
END CATCH
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
| | | | | | |
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error functions - examples
Last output
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
| | | | | | |
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |
Original error information
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'. Cannot insert duplicate key in object 'dbo.products'. The duplicate
key value is (Trek Powerfly 5 - 2018).
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error functions - examples
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
| Error_number | Error_severity | Error_state | Error_procedure | Error_line | Error_message |
| | | | | | |
| NULL | NULL | NULL | NULL | NULL | NULL |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Error functions in nested TRY...CATCH constructs
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
BEGIN TRY
INSERT INTO myErrors
VALUES ('ERROR!')
END TRY
BEGIN CATCH
SELECT 'Outer CATCH block' AS 'Error_from',
ERROR_NUMBER() AS Error_number,
ERROR_MESSAGE() AS Error_message;
END CATCH
END CATCH
| Error_from | Error_number | Error_message |
| | | |
| Outer CATCH block | 8152 | String or binary data would be truncated. |
TRANSACTIONS AND ERROR HANDLING IN SQL SERVER
Let's practice!
T R A N S A C TI O N S A N D E R R O R H A N D L I N G I N S Q L S E R V E R