TRY … CATCH-sætningen i Transact-SQL registrerer og håndterer fejlforhold i databaseprogrammer. Denne erklæring er hjørnestenen i SQL Server fejlhåndtering og er en vigtig del af udviklingen af robuste databaseapplikationer. TRY … CATCH gælder for SQL Server fra og med 2008, Azure SQL Database, Azure SQL Data Warehouse og Parallel Data Warehouse.
Introduktion til TRY … CATCH
TRY … CATCH virker ved at give dig mulighed for at angive to Transact-SQL-sætninger: en, som du vil "prøve" og en anden til at "fange" eventuelle fejl, der måtte opstå. Når SQL Server møder en TRY … CATCH-sætning, udfører den straks den erklæring, der er indeholdt i TRY-klausulen. Hvis TRY-sætningen udføres med succes, bevæger SQL Server videre. Men hvis TRY-sætningen genererer en fejl, udfører SQL Server CATCH-sætningen for at håndtere fejlen graciøst.
Den grundlæggende syntaks tager denne form:
BEGIN TRY sætningsblok SlutprøveBEGIN FANGsql_statementSLUTFANG ; Det er nemt at forstå brugen af denne erklæring gennem et eksempel. Forestil dig at du er administrator af en human resource database, der indeholder en tabel med navnet "Medarbejdere", som indeholder oplysninger om hver enkelt medarbejder i din organisation. Denne tabel bruger et heltals medarbejder ID nummer som primærnøgle. Du kan forsøge at bruge nedenstående erklæring for at indsætte en ny medarbejder i din database: INDSÆT TIL medarbejdere (id, fornavn, sidste navn, udvidelse)VÆRDIER (12497, 'Mike', 'Chapple', 4201)
Under normale omstændigheder vil denne sætning tilføje en række til medarbejderbordet. Men hvis en medarbejder med ID 12497 allerede findes i databasen, ville indsættelsen af rækken krænke primærnøglebegrænsningen og resultere i følgende fejl: Msg 2627, Level 14, State 1, Line 1Overtrædelse af PRIMARY KEY-begrænsning 'PK_employee_id'. Kan ikke indsætte duplikatnøgle i objektet 'dbo.employees'.Erklæringen er afsluttet.
Mens denne fejl giver dig de oplysninger, du har brug for til fejlfinding af problemet, er der to problemer med det. For det første er meddelelsen kryptisk. Den indeholder fejlkoder, linjenumre og andre oplysninger, der er uforståelige for den gennemsnitlige bruger. For det andet, og vigtigere, forårsager det udsagnet om at afbryde og kunne forårsage et programnedbrud.Alternativet er at pakke sætningen i et TRY … CATCH-sætning, som vist her: BEGIN TRYINDSÆT TIL medarbejdere (id, fornavn, sidste navn, udvidelse)VÆRDIER (12497, 'Mike', 'Chapple', 4201)SlutprøveBEGIN FANGPRINT 'FEJL:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Medarbejder Mail',@recipients = '[email protected]',@body = 'Der opstod en fejl ved oprettelse af en ny medarbejderpost.',@subject = 'Medarbejder ID Duplication Error';SLUTFANG
I dette eksempel rapporteres eventuelle fejl, der forekommer, til både brugeren, der udfører kommandoen og [email protected] e-mail-adressen. Fejlen vist til brugeren er: Fejl: Overtrædelse af PRIMARY KEY-begrænsning 'PK_employee_id'. Kan ikke indsætte duplikatnøgle i objektet 'dbo.employees'.Mail køen.
Programudførelsen fortsætter normalt, så programmereren kan håndtere fejlen. Brug af TRY … CATCH-sætningen er en elegant måde at proaktivt registrere og håndtere fejl, der opstår i SQL Server-databaseprogrammer. Hvis du vil lære mere om det strukturerede forespørgselssprog, skal du se Introduktion til SQL. TRY … KATCH Eksempel
Lære mere