Yon gid Etap-pa-StepUsing TRY ... KATCH manyen Erè SQL sèvè

Idantifye erè san entèwonp ekzekisyon

TRY la ... deklarasyon CATCH nan Transact- SQL detekte ak okipe kondisyon erè nan aplikasyon pou baz done ou. Deklarasyon sa a se poto a nan SQL sèvè erè manyen epi li se yon pati enpòtan nan devlope aplikasyon pou baz done gaya. TRY ... KATCH aplike nan sèvè SQL kòmanse ak 2008, Azure SQL Database, Azure SQL Done Depo ak depo Done Paralèl.

Entwodwi TRY..KATCH

TRÈ ... CATCH travay pa pèmèt ou presize de deklarasyon Transact-SQL: yon sèl ke ou vle "eseye" ak yon lòt pou itilize nan "trape" nenpòt ki erè ki ta ka leve. Lè SQL sèvè rankontre yon TRY ... deklarasyon CATCH, li imedyatman ègzekutra deklarasyon ki enkli nan kloz la TRY. Si deklarasyon an TRY ègzekutra avèk siksè, SQL sèvè tou senpleman deplase sou. Sepandan, si deklarasyon an TRY jenere yon erè, SQL sèvè egzekite deklarasyon an CATCH grasyeu okipe erè a.

Sentaks debaz la pran fòm sa a:

FÈ TREN {sql_statement | deklarasyon_block} END TRY BEGIN CATCH [{sql_statement | deklarasyon_blòk}] END CATCH [; ]

TRÈ ... KATCH Egzanp

Li pi fasil yo konprann itilize nan deklarasyon sa a nan itilize nan yon egzanp. Imajine ke ou se administratè a nan yon baz resous imen ki gen yon tab ki rele "Anplwaye," ki gen enfòmasyon sou chak nan anplwaye yo nan òganizasyon ou an. Tablo sa a itilize yon nonb an antye non ID kòm kle prensipal la . Ou ta ka eseye itilize deklarasyon ki anba a pou mete yon nouvo anplwaye nan baz done ou:

ANPLWAYE nan anplwaye (id, first_name, last_name, ekstansyon) VALÈ (12497, 'Mike', 'Chapple', 4201)

Nan sikonstans nòmal, deklarasyon sa a ta ajoute yon ranje nan anplwaye tab la. Sepandan, si yon anplwaye ki gen ID 12497 deja egziste nan baz done a, mete ranje a ta vyole prensipal kontrent kle a ak rezilta nan erè sa a:

Msg 2627, Nivo 14, Eta 1, Liy 1 Vyolasyon PRIMARY KEY kontrent 'PK_employee_id'. Pa ka mete kopi kopi nan 'dbo.employees' objè. Deklarasyon an te sispann.

Pandan ke erè sa a bay ou ak enfòmasyon ou bezwen rézoudr pwoblèm nan, gen de pwoblèm ak li. Premyèman, mesaj la se kript. Li gen ladan kòd erè, nimewo liy ak lòt enfòmasyon enkonpreansibl itilizatè a mwayèn. Dezyèmman, ak pi enpòtan, li lakòz deklarasyon an pou abòde ak ka lakòz yon aksidan aplikasyon.

Altènatif la se vlope deklarasyon an nan yon TRY ... deklarasyon CATCH, jan yo montre anba a:

PRAN SIYEN ENFÒMASYON POU anplwaye yo (id, first_name, last_name, ekstansyon) VALÈ (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH EKRI "Erè: '+ ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @ profile_name = 'Anplwaye Mail', @recipients = 'hr@foo.com', @ moun = 'Yon erè ki te fèt kreye yon nouvo anplwaye dosye.', @subject = 'Erè ID Duplication Error'; END KATCH

Nan egzanp sa a, nenpòt ki erè ki fèt yo rapòte nan tou de itilizatè a egzekite lòd la ak adrès e-mail hr@foo.com. Erè a montre itilizatè a parèt anba a:

Erè: Vyolasyon PRIMARY KEY kontrent 'PK_employee_id'. Pa ka mete kopi kopi nan 'dbo.employees' objè. Mail queued.

Sa ki pi enpòtan, aplikasyon ekzekisyon ap kontinye nòmalman, sa ki pèmèt pwogramè a grasyeu okipe erè a. Sèvi ak TRY la ... deklarasyon CATCH se yon fason elegant nan proactively detekte ak okipe erè ki rive nan SQL sèvè aplikasyon pou baz done.

Aprann plis

Si ou vle aprann plis sou Lang estriktire a Query, li Entwodiksyon nan SQL .