Identifika żbalji mingħajr ma tinterrompi l-eżekuzzjoni
Id-dikjarazzjoni TRY ... CATCH fi Transact- SQL jiskopri u jittratta l-kondizzjonijiet ta 'żball fl-applikazzjonijiet tad-database tiegħek. Din id-dikjarazzjoni hija l-pedament ta 'l-immaniġġjar ta' l-iżbalji ta 'SQL Server u hija parti importanti ta' l-iżvilupp ta 'applikazzjonijiet ta' database robusti. TRY ... QABDA tapplika għal SQL Server li tibda bl-2008, Azure Database SQL, Azure SQL Data Warehouse u Parallel Data Warehouse.
L-introduzzjoni ta 'TRY..CATCH
TRY ... CATCH taħdem billi tkun tista 'tispeċifika żewġ dikjarazzjonijiet Transact-SQL: waħda li tixtieq "tipprova" u ieħor biex tuża "qabda" kull żball li jista' jinqala '. Meta SQL Server jiltaqa 'ma' TRY ... dikjarazzjoni CATCH, minnufih tesegwixxi d-dikjarazzjoni inkluża fil-klawżola TRY. Jekk id-dikjarazzjoni TRY tesegwixxi b'suċċess, SQL Server sempliċiment imur fuq. Madankollu, jekk id-dikjarazzjoni TRY tiġġenera żball, SQL Server jeżegwixxi d-dikjarazzjoni CATCH biex jimmaniġġja l-iżball b'mod grazzjuż.
Is-sintassi bażika tieħu din il-forma:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [[sql_statement | statement_block}] END CATCH [; ]TRY ... CATCH Eżempju
Huwa eħfef li tifhem l-użu ta 'din id-dikjarazzjoni permezz tal-użu ta' eżempju. Immaġina li int l-amministratur ta 'database tar-riżorsi umani li fiha tabella bl-isem "Impjegati", li fiha informazzjoni dwar kull impjegat fl-organizzazzjoni tiegħek. Dik it-tabella tuża numru ta 'ID tal-impjegat numru sħiħ bħala ċ -ċavetta primarja . Int tista 'tipprova tuża d-dikjarazzjoni hawn taħt biex inserixxi impjegat ġdid fid-database tiegħek:
INSERT INTO impjegati (id, first_name, last_name, extension) VALURI (12497, 'Mike', 'Chapple', 4201)F'ċirkostanzi normali, din id-dikjarazzjoni żżid ringiela mal-mejda tal-Impjegati. Madankollu, jekk impjegat bl-ID 12497 diġà jeżisti fid-database, l-inseriment tar-ringiela jikser ir-restrizzjoni ewlenija ewlenija u jirriżulta fl-iżball li ġej:
Msg 2627, Livell 14, Stat 1, Linja 1 Ksur tar-restrizzjoni PRIMARY KEY 'PK_employee_id'. Ma tistax tiddaħħal ċavetta duplikata fl-oġġett "dbo.employees". Id-dikjarazzjoni ntemmet. Filwaqt li dan l-iżball jipprovdilek l-informazzjoni li għandek bżonn biex issolvi l-problema l-problema, hemm żewġ kwistjonijiet magħha. L-ewwelnett, il-messaġġ huwa kriptiku. Jinkludi kodiċijiet ta 'żball, numri tal-linja u informazzjoni oħra mhux intelliġibbli għall-utent medju. It-tieni, u aktar importanti, tikkawża li l-istqarrija tbatti u tista 'tikkawża waqgħa fl-applikazzjoni.
L-alternattiva hija li nħejju d-dikjarazzjoni fi TRY ... dikjarazzjoni CATCH, kif muri hawn taħt:
F'dan l-eżempju, kwalunkwe żball li jseħħ jiġi rrappurtat kemm lill-utent li jesegwixxi l-kmand kif ukoll lill-indirizz tal-e-mail hr@foo.com. L-iżball li jintwera lill-utent jidher hawn taħt:
Żball: Vjolazzjoni tar-restrizzjoni PRIMARY KEY 'PK_employee_id'. Ma tistax tiddaħħal ċavetta duplikata fl-oġġett "dbo.employees". Mail fil-kju.Aktar importanti, l-eżekuzzjoni ta 'l-applikazzjoni tkompli b'mod normali, u tippermetti lill-programmatur li jimmaniġġja l-iżball b'mod grazzjuż. L-użu tad-dikjarazzjoni TRY ... CATCH huwa mod eleganti biex b'mod proattiv jikxef u jimmaniġġja l-iżbalji li jseħħu fl-applikazzjonijiet tad-database SQL Server.
Tagħlim Aktar
Jekk trid titgħallem aktar dwar il-Lingwa ta 'Mistoqsija Strutturata, aqra l- Introduzzjoni għall-SQL .