Instrucțiunea TRY / CATCH din Transact-SQL detectează și gestionează condițiile de eroare în aplicațiile de baze de date. Această afirmație este piatra de temelie a SQL Tratarea erorilor de server și este o parte importantă a dezvoltării aplicațiilor de bază de date robuste.
TRY / CATCH se aplică SQL Server începând cu 2008, Azure SQL Database, Azure SQL Data Warehouse și Parallel Data Warehouse.
Vă prezentăm TRY / CATCH
TRY. Când SQL Server întâlnește o instrucțiune TRY / CATCH, aceasta execută imediat instrucțiunea inclusă în clauza TRY. Dacă instrucțiunea TRY se execută cu succes, SQL Server trece mai departe. Cu toate acestea, dacă instrucțiunea TRY generează o eroare, SQL Server execută instrucțiunea CATCH pentru a trata eroarea cu grație.
Sintaxa de bază ia această formă:
ÎNCEPE Încearcă
{sql_statement | bloc de declarații}
ÎNCERCĂRI FINALE
ÎNCEPE CAPTURA
[{sql_statement | statement_block}]
CAPTURA DE SFARSIT
[; ]
Exemplu TRY / CATCH
Luați în considerare o bază de date cu resurse umane care conține un tabel numit
angajați, care conține informații despre fiecare dintre angajații unei companii. Tabelul respectiv folosește un număr întreg de identificare a angajatului ca cheia principala.S-ar putea să încercați să utilizați declarația de mai jos pentru a insera un nou angajat în baza de date:
INSERT INTO angajați (id, prenume, prenume, extensie)
VALORI (12497, „Mike”, „Chapple”, 4201)
În circumstanțe normale, această declarație ar adăuga un rând în tabelul Angajaților. Cu toate acestea, dacă un angajat cu ID 12497 există deja în baza de date, inserarea rândului ar încălca constrângerea cheii principale și ar duce la următoarea eroare:
Msg 2627, nivel 14, stat 1, linie 1
Încălcarea constrângerii PRIMARY KEY „PK_employee_id”. Nu se poate insera cheia duplicat în obiectul „dbo.employees”.
Declarația a fost încheiată.
Deși 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 criptic. Include coduri de eroare, numere de linie și alte informații care sunt de neînțeles pentru utilizatorul mediu. În al doilea rând, și mai important, aceasta face ca declarația să se întrerupă și ar putea provoca o blocare a aplicației.
Alternativa este să înfășurați declarația într-o declarație TRY... CATCH, așa cum se arată aici:
ÎNCEPE Încearcă
INSERT INTO angajați (id, prenume, prenume, extensie)
VALORI (12497, „Mike”, „Chapple”, 4201)
ÎNCERCĂRI FINALE
ÎNCEPE CAPTURA
PRINTĂ 'EROARE:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'E-mail angajat',
@recipients = '[email protected]',
@body = 'A apărut o eroare la crearea unei noi înregistrări de angajați.',
@subject = 'Eroare în baza de date a angajaților';
CAPTURA DE SFARSIT
În acest exemplu, orice erori care apar sunt raportate atât utilizatorului care execută comanda, cât și adresei de e-mail [email protected]. Eroarea afișată utilizatorului este:
Eroare: încălcarea constrângerii PRIMARY KEY „PK_employee_id”.
Nu se poate insera cheia duplicat în obiectul „dbo.employees”.
Mesaje la coadă.
Executarea aplicației continuă în mod normal, permițând programatorului să gestioneze eroarea. Utilizarea declarației TRY / CATCH este un mod elegant de a detecta și gestiona proactiv erorile care apar în aplicațiile de baze de date SQL Server.
Aflați mai multe
Pentru a afla mai multe despre limbajul de interogare structurat, consultați articolul nostru Bazele SQL.