TRY / CATCHi kasutamine SQL serveri vigade käsitlemiseks

click fraud protection

Transact-SQL-i käsk TRY / CATCH tuvastab ja haldab andmebaasirakenduste tõrkeolusid. See väide on SQL Serveri tõrkeotsing ja see on oluline osa usaldusväärsete andmebaasirakenduste väljatöötamisel.

TRY / CATCH kehtib SQL Serverile alates 2008. aastast, Azure SQL-i andmebaasist, Azure SQL-i andmeladust ja paralleelsest andmeladust.

Tutvustame proovimist / püüdmist

TRY./CATCH määrab kaks Transact-SQL-i lauset: ühte, mida soovite "proovida", ja teist, mis võib tekkida võivate vigade "tabamiseks". Kui SQL Server kohtab käsku TRY / CATCH, täidab ta koheselt TRY-klauslis sisalduva lause. Kui TRY-lause täidetakse edukalt, liigub SQL Server edasi. Kui aga TRY-lause tekitab vea, käivitab SQL Server vea graatsiliseks käsitsemiseks CATCH-lause.

Põhisüntaks on järgmine:

Alusta proovimist
{sql_statement | avalduse blokeerimine}
LÕPU proovige
Alusta püüdmist
[{sql_statement | avalduse_blokk}]
LÕPP PÜÜK
[; ]

Proovige / püüdke Näide

Mõelgem inimressursside andmebaasile, mis sisaldab tabelit nimega töötajad

instagram viewer
, mis sisaldab teavet ettevõtte kõigi töötajate kohta. Selles tabelis kasutatakse töötaja arvuna täisarvu esmane võti.

Uue töötaja oma andmebaasi sisestamiseks võite proovida kasutada järgmist väidet:

INSERT INTO töötajad (id, eesnimi, perekonnanimi, laiendus)
VÄÄRTUSED (12497, 'Mike', 'Chapple', 4201)

Tavaolukorras lisaks see lause tabelisse Töötajad rida. Kui aga ID-ga 12497 töötaja on andmebaasis juba olemas, rikub rea sisestamine peamise võtme piirangut ja põhjustab järgmise tõrke:

Ms 2627, tase 14, riik 1, rida 1
PRIMARY KEY piirangu „PK_employee_id” rikkumine. Objekti 'dbo.employees' duplikaatvõtet ei saa lisada.
Avaldus on lõpetatud.

Kuigi see tõrge annab teile teavet, mida vajate probleemi tõrkeotsinguks, on sellega kaks probleemi. Esiteks on sõnum krüptiline. See sisaldab veakoode, reanumbreid ja muud tavakasutajale arusaamatut teavet. Teiseks ja veelgi olulisem on see, et see katkestab avalduse ja võib põhjustada rakenduse krahhi.

Alternatiiv on pakkida lause lause TRY… CATCH, nagu siin näidatud:

Alusta proovimist
INSERT INTO töötajad (id, eesnimi, perekonnanimi, laiendus)
VÄÄRTUSED (12497, 'Mike', 'Chapple', 4201)
LÕPU proovige
Alusta püüdmist
PRINT 'VIGA:' + VIGA_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Töötaja kiri',
@ saajad = '[email protected]',
@body = 'Uue töötaja kirje loomisel ilmnes viga.',
@subject = 'Töötajate andmebaasi viga';
LÕPP PÜÜK

Selles näites teatatakse kõigist ilmnenud tõrgetest nii käsu täitvale kasutajale kui ka [email protected] e-posti aadressile. Kasutajale kuvatud viga on järgmine:

Viga: PRIMARY KEY piirangu „PK_employee_id” rikkumine. 
Objekti 'dbo.employees' duplikaatvõtet ei saa lisada.
E-post järjekorras.

Rakenduse käivitamine jätkub tavapäraselt, võimaldades programmeerijal viga lahendada. Lause TRY / CATCH kasutamine on elegantne viis ennetada ja tõrjuda SQL Serveri andmebaasirakendustes esinevaid vigu.

Lisateave

Struktureeritud päringukeele kohta lisateabe saamiseks vaadake meie artiklit SQL-i põhialused.

instagram story viewer