Skip to main content

Folosind TRY ... CATCH pentru a gestiona erorile SQL Server

Statistical Programming with R by Connor Harris (Aprilie 2025)

Statistical Programming with R by Connor Harris (Aprilie 2025)
Anonim

Instruciunea TRY … CATCH din Transact-SQL detectează și gestionează condițiile de eroare în aplicațiile bazei 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ă. Cu toate acestea, dacă instrucțiunea TRY generează o eroare, SQL Server execută instrucțiunea CATCH pentru a gestiona eroarea cu grație.

Sintaxa de bază are această formă:

Începeți să încercați bloc de declarații SfarsitÎNCEPÂNDĂ COPILULsql_statementSFÂNTUL COPII ;

TRY … Captura Exemplu

Este ușor de înțeles folosirea acestei declarații printr-un 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:

INSERTI INTO angajați (id, first_name, last_name, extensie)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, nivelul 14, starea 1, linia 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. Acesta include codurile de eroare, numerele de linie și alte informații care sunt de neînțeles 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, așa cum se arată aici:

Începeți să încercațiINSERTI INTO angajați (id, first_name, last_name, extensie)VALORI (12497, "Mike", "Chapple", 4201)SfarsitÎNCEPÂNDĂ COPILULPRINT "EROARE:" + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Mail angajat',@recipients = '[email protected]',@body = 'A apărut o eroare la crearea unui nou registru al angajaților.',@subject = 'Eroare de duplicare a angajatului';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 [email protected]. Eroarea indicată utilizatorului este următoarea:

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

Execuția aplicației continuă în mod normal, permițând programatorului să gestioneze eroarea. 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 al interogărilor, consultați Introducere în SQL.