E Step-By-Step Guide firUs TRY ... CATCH fir SQL Server Fehler ze handhaben

Identifikéieren Fehler ouni Ënnerbrieche vun der Ausféierung

D'TRY ... CATCH-Ausso zu Transact- SQL erkennt a behandelt Fehler an Äre Datenbankapplikatiounen. Dës Erklärung ass den Ecksteel vun der SQL Server-Fehlerbehandlung an ass e wichtege Bestanddeel vu robuste Datebankapplikatiounen. TRY ... CATCH gëlt fir SQL Server vu 2008, Azure SQL Database, Azure SQL Data Warehouse an Parallel Data Warehouse.

Präsentatioun vu TRY..CATCH

TRY ... CATCH funktionnéiert andeems Dir zwee Transakt-SQL-Aussoen erkläert huet: eent datt Dir "probéiert hutt" an e weidere Benotzer ze benotzen fir "Irreleech" Fehler ze beweegen. Wann SQL Server eng TRY ... CATCH -Anweisung trëfft, féiert hien direkt d'Erklärung, déi an der TRY-Klausel beinhalt. Wann de TRY-Statement erfollegräich executéiert, fiert SQL Server just op. Wann d'TRY-Statement e Feeler generéiert, féiert SQL Server d'CATCH-Ausso ausdrécklech un de Feeler aus.

Déi Basis - Syntax ass dës Form:

ËMMER TRY {sql_statement | statement_block} END TRY BEKLAMER CATCH [{sql_statement | statement_block}] END CATCH [; ]]

TRY ... CATCH Beispiller

Et ass einfach ze verstoen datt d'Benotzung vun dëser Ausso duerch d'Notzung vun engem Beispill verstane gëtt. Stellt Iech vir, datt Dir de Administrator vun enger Personal Ressourcen-Datenbank ass, déi eng Tabelle "Employees" enthält, déi Informatiounen iwwer all de Mataarbechter vun Ärer Organisatioun enthält. Dëse Table benotzt eng ganz Formel Beschäftegungsnummer als de Primärschlass . Dir kënnt versichen d'Erklärung hei ënnen ze benotzen fir e neie Mataarbechter an Är Datebank ze setzen:

INSERT INTO Mataarbechter (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

Ënner Normal Conditioune wäerten dës Ausso eng Rei mat der Tabelle "Mataarbechter" setzen. Awer wann en Employeur mat der ID 12497 schon an der Datebank existéiert, da wäerte d'Zeil setzen d'Primärschlée Constraint respektéieren an de folgende Fehler:

Msg 2627, Niveau 14, Staat 1, Linn 1 Verstouss vu PRIMÄR KEE Beschränkung 'PK_employee_id'. Konnt d 'Schlësselschlëssel am Objekt' dbo.employees 'net setzen. D'Erklärung gouf ofgeschloss.

Dëse Feeler bidd Iech déi Informatioun déi Dir braucht, fir de Problem ze behandelen, et ginn zwee Froe mat derbäi. Eischtens ass d'Botschaft kryptesch. Et enthält Fichermärter, Zeilennummeren an aner Informatiounen déi onverständlech sinn fir den duerchschnëttleche Benotzer. Zweetens, a wat méi wichteg ass et d'Erklärung fir d'Ausbrieche ze verréngeren a kéint zu enger Applikatioun ofstëmmen.

D'Alternativ ass d'Erklärung an eng TRY ... ëmginn. CATCH Ausso, wéi et hei ënnendrënner steet:

ENG BEGIN INSERÉIERT INTO Mataarbechter (id, first_name, last_name, extension) WUERTEN (12497, 'Mike', 'Chapple', 4201) END TRY BEKLACHEN KATCH DRUCK 'Fehlermeldung:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'E Feeler ass geschitt e neien Employeur Rekord.', @subject = 'Employer ID Duplication Error'; ENT CATCH

An dësem Beispill ginn all Fehler, déi opmaachen, ginn un de Benotzer deen de Kommando ausféiert an déi hr@foo.com E-Mail Adress. Den Fehler, deen de Benotzer gewisen huet, gëtt méi no:

E Feeler: Bestëmmung vu PRIMÄR KEE Beschränkung 'PK_employee_id'. Konnt d 'Schlësselschlëssel am Objekt' dbo.employees 'net setzen. Mail queued.

Am meeschte Wichtegst ass d'Ausféierung vun der Applikatioun normalerweis weider, et erméiglecht dem Programméierer e gëeeglecht Handelen dem Fehler. Benotzung vun der TRY ... CATCH Statement ass e elegante Wee fir proaktiv de Fehler z'erfollegen an ze behandele fir an SQL Server-Datenbankapplikatiounen opzefänken.

Léieren méi

Wann Dir méi iwwer d'Strukturéierter Query Sprooche léieren wëllt, liesen d'SQL-Presentatioun .