Bruke TRY / CATCH til å håndtere SQL Server-feil

click fraud protection

TRY / CATCH-setningen i Transact-SQL oppdager og håndterer feilforhold i databaseapplikasjoner. Denne uttalelsen er hjørnesteinen i SQL Serverfeilhåndtering og er en viktig del av utviklingen av robuste databaseapplikasjoner.

TRY / CATCH gjelder SQL Server som starter med 2008, Azure SQL Database, Azure SQL Data Warehouse og Parallel Data Warehouse.

Vi presenterer TRY / CATCH

TRY./CATCH fungerer ved å 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, kjører den umiddelbart setningen som er inkludert i TRY-setningen. Hvis TRY-setningen kjøres vellykket, fortsetter SQL Server. Imidlertid, hvis TRY-setningen genererer en feil, kjører SQL Server CATCH-setningen for å håndtere feilen elegant.

Den grunnleggende syntaksen har denne formen:

START PRØV
{sql_statement | uttalelsesblokk}
SLUTT PRØV
BEGIN FANGST
[{sql_statement | statement_block}]
SLUTT FANGST
[; ]

PRØV / FANGST Eksempel

Vurder en menneskelig ressursdatabase som inneholder en tabell med navnet

instagram viewer
ansatte, som inneholder informasjon om hver av de ansatte i en bedrift. Denne tabellen bruker et heltall ansattes ID-nummer som primærnøkkel.

Du kan prøve å bruke utsagnet nedenfor for å sette inn en ny ansatt i databasen din:

INSERT INTO-ansatte (id, fornavn, etternavn, utvidelse)
VERDIER (12497, 'Mike', 'Chapple', 4201)

Under normale omstendigheter vil denne uttalelsen legge til en rad i tabellen ansatte. Imidlertid, hvis en ansatt med ID 12497 allerede eksisterer i databasen, vil innføring av raden bryte den primære nøkkelbegrensningen og resultere i følgende feil:

Msg 2627, nivå 14, tilstand 1, linje 1
Brudd på PRIMÆRE NØKKEL-begrensningen 'PK_employee_id'. Kan ikke sette inn duplikatnøkkel i objektet 'dbo.employees'.
Uttalelsen er avsluttet.

Selv om denne feilen gir deg informasjonen du trenger for å feilsøke problemet, er det to problemer med den. For det første er meldingen kryptisk. Den inkluderer feilkoder, linjenumre og annen informasjon som er uforståelig for gjennomsnittsbrukeren. For det andre, og enda viktigere, fører det til at uttalelsen avbrytes og kan føre til et programkrasj.

Alternativet er å pakke uttalelsen inn i en TRY... CATCH-uttalelse, som vist her:

START PRØV
INSERT INTO-ansatte (id, fornavn, etternavn, utvidelse)
VERDIER (12497, 'Mike', 'Chapple', 4201)
SLUTT PRØV
BEGIN FANGST
SKRIV UT 'FEIL:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Ansattes e-post',
@mottakere = '[email protected]',
@body = 'Det oppstod en feil under oppretting av en ny ansattpost.',
@subject = 'Ansatt databasefeil';
SLUTT FANGST

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

Feil: Brudd på PRIMÆRE NØKKEL-begrensningen 'PK_employee_id'. 
Kan ikke sette inn duplikatnøkkel i objektet 'dbo.employees'.
E-post i kø.

Søknadskjøring 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-databaseapplikasjoner.

Lære mer

For å lære mer om Structured Query Language, sjekk ut artikkelen vår Grunnleggende om SQL.

instagram story viewer