Welcome to Sign in | Help
in Search

Tratarea Erorilor in SQL Server 2005

Last post 09-20-2006, 2:26 PM by xmldeveloper. 0 replies.
Sort Posts: Previous Next
  •  09-20-2006, 2:26 PM 117

    Tratarea Erorilor in SQL Server 2005

    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
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems