Un ghid pas cu pas pentru utilizarea TRI ... CATCH pentru a gestiona erorile SQL Server

Identificați erorile fără a întrerupe execuția

Instrucțiunea TRY ... CATCH din Transact- SQL detectează și gestionează condițiile de eroare în aplicațiile de bază de date. Această declarație este piatra de temelie a manipulării erorilor SQL Server și este o parte importantă a dezvoltării unor aplicații robuste de baze de date. TRI ... CATCH se aplică la SQL Server începând cu 2008, Azure SQL Database, Azure SQL Data Warehouse și Paralel Warehouse de date.

Introducerea TRY..CATCH

TRY ... CATCH funcționează permițându-vă să specificați două instrucțiuni Transact-SQL: una pe care doriți să o "încercați" și una pe care să o utilizați pentru a "prinde" orice eroare care ar putea apărea. Când SQL Server întâlnește o instrucțiune TRY ... CATCH, execută imediat declarația inclusă în clauza TRY. Dacă instrucțiunea TRY se execută cu succes, SQL Server se mișcă pur și simplu. Cu toate acestea, dacă instrucțiunea TRY generează o eroare, SQL Server execută instrucțiunea CATCH pentru a gestiona grațios eroarea.

Sintaxa de bază are această formă:

Începeți să încercați {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... Captura Exemplu

Este mai ușor să înțelegeți utilizarea acestei declarații prin utilizarea unui exemplu. Imaginați-vă că sunteți administratorul unei baze de date a resurselor umane care conține un tabel numit "Angajați", care conține informații despre fiecare dintre angajații din organizația dvs. Acest tabel utilizează un număr de identificare al angajatului întreg ca cheie primară . S-ar putea să încercați să utilizați instrucțiunea de mai jos pentru a insera un nou angajat în baza de date:

INSERT INTO angajați (id, first_name, last_name, extension) Valori (12497, "Mike", "Chapple", 4201)

În circumstanțe normale, această afirmație ar adăuga un rând în tabelul Angajați. Cu toate acestea, dacă un angajat cu ID 12497 există deja în baza de date, inserarea rândului ar încălca constrângerea cheii primare și ar duce la următoarea eroare:

Msg 2627, Level 14, State 1, Line 1 Încălcarea constrângerii PRIMARY KEY "PK_employee_id". Nu se poate introduce cheia duplicat în obiectul "dbo.employees". Declarația a fost încheiată.

În timp ce această eroare vă oferă informațiile de care aveți nevoie pentru a depana problema, există două probleme cu aceasta. În primul rând, mesajul este critic. Aceasta include codurile de eroare, numerele de linie și alte informații neinteligibile pentru utilizatorul mediu. În al doilea rând, și mai important, cauzează anularea declarației și ar putea provoca un accident de aplicație.

Alternativa este să înfășurați instrucțiunea într-o instrucțiune TRY ... CATCH, după cum se arată mai jos:

BEGIN TRY INSERT INTO angajați (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT Eroare: + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'E-mail angajat', @recipients = 'hr@foo.com', @body = 'A apărut o eroare la crearea unei noi înregistrări a angajatului.', @subject = 'Eroare duplicare angajat ID'; SFÂNTUL COPII

În acest exemplu, orice eroare care apare este raportată atât utilizatorului care execută comanda, cât și adresei de e-mail hr@foo.com. Eroarea afișată utilizatorului apare mai jos:

Eroare: Încălcarea constrângerii PRIMARY KEY 'PK_employee_id'. Nu se poate introduce cheia duplicat în obiectul "dbo.employees". Mail în coada.

Cel mai important, executarea aplicației continuă în mod normal, permițând programatorului să se ocupe cu grație de eroare. Utilizarea instrucțiunii TRY ... CATCH este o modalitate elegantă de a detecta proactiv și de a gestiona erorile care apar în aplicațiile de baze de date SQL Server.

Aflați mai multe

Dacă doriți să aflați mai multe despre limbajul structurat de interogări, citiți Introducere în SQL .