Skip to main content

Bruk TRY ... CATCH til å håndtere SQL Server feil

133rd Knowledge Seekers Workshop Aug 18 2016 (April 2025)

133rd Knowledge Seekers Workshop Aug 18 2016 (April 2025)
Anonim

TRY … CATCH-setningen i Transact-SQL oppdager og håndterer feilforhold i databaseprogrammer. Denne uttalelsen er hjørnesteinen i SQL Server-feilhåndtering, og er en viktig del av utviklingen av robuste databaseapplikasjoner. TRY … CATCH gjelder for SQL Server fra og med 2008, Azure SQL Database, Azure SQL Data Warehouse og Parallel Data Warehouse.

Vi presenterer TRY … CATCH

TRY … CATCH fungerer ved å tillate deg å spesifisere to Transact-SQL-setninger: en som du vil "prøve" og en annen til å "fange" eventuelle feil som kan oppstå. Når SQL Server møter en TRY … CATCH-setning, utfører den umiddelbart setningen som er inkludert i TRY-klausulen. Hvis TRY-setningen kjøres, går SQL Server videre. Men hvis TRY-setningen genererer en feil, utfører SQL Server CATCH-setningen for å håndtere feilen grasiøst.

Den grunnleggende syntaksen tar dette skjemaet:

Begynn prøve uttalelsesblokk SluttprøveBegynn å fangesql_statementSLUTGÅENDE ;

TRY … CATCH Eksempel

Det er lett å forstå bruken av denne setningen gjennom et eksempel. Tenk deg at du er administrator av en human resource database som inneholder en tabell som heter "Ansatte", som inneholder informasjon om hver av de ansatte i organisasjonen. Det tabellen bruker et heltall-ansattes ID-nummer som primærnøkkel. Du kan prøve å bruke setningen under for å sette inn en ny ansatt i databasen din:

INSERT TIL ansatte (id, fornavn, etternavn, forlengelse)Verdier (12497, 'Mike', 'Chapple', 4201)

Under normale omstendigheter vil denne setningen legge til en rad i tabellene medarbeiderne. Men hvis en medarbeider med ID 12497 allerede eksisterer i databasen, vil innføringen av raden være i strid med primærnøkkelbegrensningen og resultere i følgende feil:

Msg 2627, Level 14, State 1, Line 1Overtredelse av PRIMARY KEY-begrensning 'PK_employee_id'. Kan ikke sette inn duplikatnøkkel i objektet 'dbo.employees'.Erklæringen er avsluttet.

Mens denne feilen gir deg informasjonen du trenger for å feilsøke problemet, er det to problemer med det. Først er meldingen kryptisk. Den inneholder feilkoder, linjenumre og annen informasjon som er uforståelig for den gjennomsnittlige brukeren. For det andre, og enda viktigere, fører det til at uttalelsen avbrytes og kan forårsake et programkrasj.Alternativet er å pakke ut setningen i en TRY … CATCH-setning, som vist her:

Begynn prøveINSERT TIL ansatte (id, fornavn, etternavn, forlengelse)Verdier (12497, 'Mike', 'Chapple', 4201)SluttprøveBegynn å fangeSKRIV UT 'FEIL:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Ansatte Mail',@recipients = '[email protected]',@body = 'Det oppsto en feil under oppretting av en ny ansattspost.',@subject = 'Ansattes ID duplisering feil';SLUTGÅENDE

I dette eksemplet rapporteres eventuelle feil som oppstår, til både brukeren som kjører kommandoen og [email protected] e-postadressen. Feilen vist til brukeren er:

Feil: Overtredelse av PRIMARY KEY-begrensning 'PK_employee_id'. Kan ikke sette inn duplikatnøkkel i objektet 'dbo.employees'.Postkøen.

Programutførelsen fortsetter normalt, slik at programmereren kan håndtere feilen. Bruk av TRY … CATCH-setningen er en elegant måte å proaktivt oppdage og håndtere feil som oppstår i SQL Server-databaseprogrammer.

Lær mer

Hvis du vil lære mer om det strukturerte spørrespråket, sjekk ut Introduksjon til SQL.