SQL Server 2005 introduce modelul TRY/CATCH pentru tratarea erorilor. Folosirea acestuia este similara cu folosirea in alte limbaje de programare ca C++ sau C#.
Sintaxa:
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
{ sql_statement | statement_block }
END CATCH
[ ; ]
Functii:
Cateva functii pun la dispozitie informatii despre eventualele erori:
ERROR_NUMBER() returneaza numarul erorii.
ERROR_MESSAGE() returneaza textul complet al mesajului de eroare.
ERROR_SEVERITY() returneaza severitatea erorii.
ERROR_STATE() returneaza numarul de stare al erorii. ERROR_LINE() returneaza numarul liniei de cod care a cauzat eroarea.
ERROR_PROCEDURE() returneaza numele procedurii stocate sau trigger-ului in care a avut loc eroarea.
Functiile pot fi folosite doar in interiorul blocului CATCH, apelate din exterior returnand NULL.
Exemplu:
BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
-- Output
-- ErrorNumber ErrorMessage
-- 8134 Divide by zero error encountered.
Observatii:
-
Blocul CATCH trebuie sa urmeze imediat dupa blocul TRY.
-
Nu exista bloc FINALLY.
-
Pot fi prinse erori cu o severitate mai mare de 10. Erorile cu o severitate 20 sau mai mari pot fi prinse de TRY...CATCH daca nu este intrerupat conexiunea.
-
In anumite situatii o exceptie va genera mai multe mesaje de eroare. In acest caz particular functiile de eroare vor fi setate de ultimul mesaj de eroare. De exemplu:
-- Urmatoarele erori vor fi generate:
-- Msg 2714, Level 16, State 6, Line 7
-- There is already an object named 'MyTable' in the database.
-- Msg 2759, Level 16, State 0, Line 7
-- CREATE SCHEMA failed due to previous errors.
BEGIN TRY
EXEC ('
CREATE SCHEMA MySchema
CREATE TABLE MyTable(id int)
CREATE TABLE MyTable (id int)
');
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
END CATCH
-- Output
-- CREATE SCHEMA failed due to previous errors.
Cristian Andrei Lefter, SQL Server MVP
MCT, MCSA, MCDBA, MCAD, MCSD .NET,
MCTS, MCITP - Database Administrator SQL Server 2005
http://sqlserver.ro