Skip to main content

TRY ... CATCH gebruiken om SQL Server-fouten af ​​te handelen

Week 7, continued (April 2025)

Week 7, continued (April 2025)
Anonim

De TRY … CATCH-instructie in Transact-SQL detecteert en verwerkt foutcondities in databasetoepassingen. Deze verklaring is de hoeksteen van de foutafhandeling van SQL Server en vormt een belangrijk onderdeel bij het ontwikkelen van krachtige databasetoepassingen. TRY … CATCH is van toepassing op SQL Server vanaf 2008, Azure SQL Database, Azure SQL Data Warehouse en Parallel Data Warehouse.

Introductie van TRY … VANGST

TRY … CATCH werkt door u toe te staan ​​twee Transact-SQL-instructies op te geven: een die u wilt "proberen" en een andere om te gebruiken om eventuele fouten te "vangen". Wanneer SQL Server een TRY … CATCH-instructie tegenkomt, voert deze onmiddellijk de instructie uit die is opgenomen in de TRY-clausule. Als de TRY-instructie met succes wordt uitgevoerd, gaat SQL Server verder. Als de TRY-instructie echter een fout genereert, voert SQL Server de CATCH-instructie uit om de fout netjes af te handelen.

De basissyntaxis heeft de volgende vorm:

BEGIN PROBEER instructieblok EINDE PROBERENBEGIN VANGSTsql_statementEIND VANGST ;

TRY … CATCH Voorbeeld

Het gebruik van deze verklaring is eenvoudig te begrijpen door een voorbeeld. Stel u voor dat u de beheerder bent van een personeelsdatabase met een tabel met de naam "Werknemers", die informatie bevat over elk van de werknemers in uw organisatie. Die tabel gebruikt een integer werknemers-ID nummer als de primaire sleutel. U kunt proberen de onderstaande verklaring te gebruiken om een ​​nieuwe werknemer in uw database in te voegen:

INSERT INTO werknemers (id, voornaam, achternaam, extensie)VALUES (12497, 'Mike', 'Chapple', 4201)

Onder normale omstandigheden zou deze verklaring een rij toevoegen aan de tabel Werknemers. Als een werknemer met ID 12497 echter al in de database bestaat, zou het invoegen van de rij de primaire sleutelbeperking schenden en leiden tot de volgende fout:

Msg 2627, niveau 14, staat 1, regel 1Overtreding van PRIMARY KEY-beperking 'PK_employee_id'. Kan geen dubbele sleutel invoegen in object 'dbo.employees'.De verklaring is beëindigd.

Hoewel deze fout u de informatie geeft die u nodig hebt om het probleem op te lossen, zijn er twee problemen. Ten eerste is het bericht cryptisch. Het bevat foutcodes, regelnummers en andere informatie die onbegrijpelijk is voor de gemiddelde gebruiker. Ten tweede, en wat nog belangrijker is, zorgt het ervoor dat de instructie afbreekt en een applicatiecrash kan veroorzaken.Het alternatief is om de instructie in een TRY … CATCH-instructie te verpakken, zoals hier wordt weergegeven:

BEGIN PROBEERINSERT INTO werknemers (id, voornaam, achternaam, extensie)VALUES (12497, 'Mike', 'Chapple', 4201)EINDE PROBERENBEGIN VANGSTPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Er is een fout opgetreden bij het maken van een nieuw werknemersrecord.',@subject = 'Duplicatiefout werknemer-ID';EIND VANGST

In dit voorbeeld worden eventuele fouten gerapporteerd aan zowel de gebruiker die de opdracht uitvoert als het [email protected] e-mailadres. De aan de gebruiker getoonde fout is:

Fout: schending van PRIMAIRE KEY-beperking 'PK_employee_id'. Kan geen dubbele sleutel invoegen in object 'dbo.employees'.Mail in de wachtrij geplaatst.

De uitvoering van de applicatie gaat normaal verder, waardoor de programmeur de fout kan verwerken. Het gebruik van de TRY … CATCH -instructie is een elegante manier om proactief fouten te detecteren en af ​​te handelen die optreden in SQL Server-databasetoepassingen.

Meer leren

Als u meer wilt weten over de Structured Query Language, bekijk dan Introduction to SQL.