Skref fyrir skref leiðbeiningar til að nota TRY ... KAFLI til að meðhöndla SQL Server villur

Tilgreindu villur án þess að trufla framkvæmd

TRY ... CATCH yfirlýsingin í Transact- SQL greinir og sér um villuskilyrði í gagnagrunni þinni. Þessi yfirlýsing er hornsteinn í SQL Server villa meðhöndlun og er mikilvægur þáttur í að þróa öflugt gagnasafn forrit. TRY ... CATCH gildir um SQL Server frá og með 2008, Azure SQL Database, Azure SQL Data Warehouse og Parallel Data Warehouse.

Kynna TRY..CATCH

TRY ... CATCH virkar með því að leyfa þér að tilgreina tvær Transact-SQL staðhæfingar: eitt sem þú vilt "reyna" og annað til að nota til að "grípa" einhverjar villur sem gætu komið upp. Þegar SQL Server kynnir TRY ... CATCH yfirlýsingu, keyrir það strax yfirlýsingu sem er innifalin í TRY ákvæðinu. Ef TRY yfirlýsingin gengur vel, færir SQL Server einfaldlega áfram. Hins vegar, ef TRY-yfirlýsingin býr til villu, keyrir SQL Server CATCH yfirlýsingu til að takast á við tökin ánægjulega.

Grunn setningafræði tekur þetta form:

Byrjaðu á TRY {sql_statement | statement_block} END TRY START BEGIN [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH Dæmi

Það er auðveldasta að skilja notkun þessa yfirlýsingu með því að nota dæmi. Ímyndaðu þér að þú sért stjórnandi mannlegra gagnagrunna sem inniheldur töflu sem heitir "Starfsmenn", sem innihalda upplýsingar um hvert starfsmenn í fyrirtækinu þínu. Það borð notar heiltala starfsmenn kennitala sem aðal lykil . Þú gætir reynt að nota yfirlýsingu hér að neðan til að setja inn nýjan starfsmann í gagnagrunninn þinn:

INNGANGUR til starfsmanna (auðkenni, fornafn, síðasta nafn, framlenging) Gildi (12497, 'Mike', 'Chapple', 4201)

Undir venjulegum kringumstæðum myndi þessi yfirlýsing bæta við röð við starfsmannaborðið. Hins vegar, ef starfsmaður með ID 12497 er þegar til í gagnagrunninum, myndi setja raðin brjóta í bága við aðal lykilþvingunina og leiða til eftirfarandi villa:

Msg 2627, Level 14, Ríki 1, Lína 1 Brot á PRIMARY KEY þvingun 'PK_employee_id'. Ekki er hægt að setja afrita lykil í 'dbo.employees' hlut. Yfirlýsingin hefur verið hætt.

Þó að þessi villa veitir þér þær upplýsingar sem þú þarft til að leysa vandann, þá eru tveir vandamál með það. Í fyrsta lagi er skilaboðin dulrituð. Það felur í sér villukóða, línunúmer og aðrar upplýsingar sem eru óskiljanlegar fyrir meðalnotendur. Í öðru lagi, og meira um vert, veldur það yfirlýsingu að hætta við og gæti valdið umsóknarslysi.

Valið er að vefja yfirlýsingu í TRY ... CATCH yfirlýsingu, eins og sýnt er hér að neðan:

Byrjaðu að reyna að skrifa inn starfsmenn (auðkenni, fornafn, síðasta nafn, eftirnafn) VÖRUR (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Villa:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Starfsmaður póstur', @recipients = 'hr@foo.com', @body = 'Villa kom upp við að búa til nýtt starfsmannatöfluna.', @subject = 'Fjölföldunartilkynning fyrir starfsmannaskírteini'; ENDURGANGUR

Í þessu dæmi er tilkynnt um allar villur sem eiga sér stað, bæði fyrir notanda sem framkvæmir skipunina og á netfangið hr@foo.com. Villa birtist notanda birtist hér fyrir neðan:

Villa: Brot á PRIMARY KEY þvingun 'PK_employee_id'. Ekki er hægt að setja afrita lykil í 'dbo.employees' hlut. Póstur í biðstöðu.

Mikilvægast er, umsókn framkvæmd heldur áfram að jafnaði, sem gerir forritara kleift að takast á við tökin. Notkun TRY ... CATCH yfirlýsingin er glæsileg leið til að greina og meðhöndla villur sem eiga sér stað í SQL Server gagnagrunni.

Læra meira

Ef þú vilt læra meira um Structured Query Language, lestu Inngangur að SQL .