In step-by-step gids te brûken TRY ... CATCH om SQL-tsjinnerferrjochten te hanneljen

Identifisearje fouten sûnder ûnderbrekking út te fieren

De TRY ... CATCH-ferklearring yn Transact- SQL detektearret en behannelet flaterheidsbedingungen yn jo database-tapassingen. Dizze deklaraasje is de eftergrûn fan SQL Server-flaterhandling en is in wichtich ûnderdiel fan ûntwikkeling fan robuste database-applikaasjes. TRY ... CATCH jildt foar SQL Server begjin 2008, Azure SQL databank, Azure SQL Data Warehouse en Parallel Data Warehouse.

Ynlieding TRY..CATCH

TRY ... CATCH wurket troch te jaan dat jo twa Transact-SQL-ferklearrings spesifisearje: ien dat jo "besykje" wolle en in oare brûke om "fouten" te meitsjen dy't ûntstean kinne. As SQL-tsjinner in TRY-CATCH-oanfetting besmacht, docht it fuortdaliks de deklaraasje yn 'e TRY-klausel út. As de TRY-oanfetting mei súkses útfiert, ferpleatst SQL Server ienfâldich. Wannear't de TRY-deklaraasje in flater bart, útfiert SQL Server de CATCH-oanfetting om it flater graach mei te meitsjen.

De basisyntaks nimt dizze foarm:

BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH Foarbyld

It is it maklikste om it brûken fan dizze ferklearring te begripen fia it brûken fan in foarbyld. Stel jimme foar dat jo de behearder fan in human resources database binne dy't in tabel befettet mei "Employees", dy't ynformaasje hat oer elke fan 'e meiwurkers yn jo organisaasje. Dizze tab brûkt in ynteger meiwurker ID-nûmer as de primêre kaai . Jo kinne besykje de hjirboppe te brûken gebrûk te meitsjen om in nije meiwurker yn jo database te ynfoen:

INSERT yn wurknimmers (id, firstname, lastname, ferwidering) VALUES (12497, 'Mike', 'Chapple', 4201)

Under normale omstannichheden soe dizze ferklearring in rige taheakje oan it wurkblêd tabel. As der lykwols in meiwurker mei ID 12497 al yn 'e databank bestiet, soe de rigel ynstelle de primêre kaaiûntbrekking te fieren en folgje de folgjende fout:

Msg 2627, nivo 14, steat 1, rigel 1 Ferbining fan PRIMARY KEY beheining 'PK_employee_id'. Kin dûbele toets yn it objekt 'dbo.employees' net ynfoegje. De ferklearring is ôflaat.

Wyls dizze flater biedt jo mei de ynformaasje dy jo nedich hawwe om it probleem te behannelje, binne der twa problemen mei. Earst is it berjocht kryptysk. It befettet flaterkoades, rigelsnûmers en oare ynformaasje ûnferjitlik foar de trochsneed brûker. Twadder en wat wichtiger is it de ferklearring te feroarjen en kin in oanfraach feroarsaakje.

It alternatyf is om de ferklearring te ferwikkjen yn in TRY ... CATCH-ferklearring, sa't hjirûnder oanjûn is:

BEGIN TRY INSERT INTO meiwurkers (id, first_name, last_name, útwreiding) VALUES (12497, 'Mike', 'Chapple', 4201) FERGEE BEGIN CATCH PRINT 'Flater:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'In flater is miskien opnommen fan in nij personiel-record. ", @subject =' Employee ID Duplication Error '; END CATCH

Yn dit foarbyld binne alle fouten dy't foarkomme rapporteare foar sawol de brûker dy't it kommando útfiere en it e-postadres hr@foo.com útfiere. De flater foar de brûker ferskynt hjirûnder:

Flater: Ferwidering fan PRIMARY KEY-ferbining 'PK_employee_id'. Kin dûbele toets yn it objekt 'dbo.employees' net ynfoegje. Mail wachtet.

Meast wichtich is de applikaasjeútfiering normaal trochgean, sadat de programmator it flater graach behannele wurde kin. Brûk fan de TRY ... CATCH-ferklearring is in elegante manier om proefaktivearje te fekken en te behanneljen fan flateren dy't yn SQL Server-database applikaasjes foarkomme.

Learje mear

As jo ​​mear leare wolle oer de Struktureare Query Taal, lês Ynlieding nei SQL .