Una guida di u Passu à guidà aduprate TRY ... CATCH per impugnà i errore SQL Server

Identifiche l'errori senza interruperà l'esekzione

A TRY ... CATCH statement in Transact- SQL detecta e gestione cundizzioni d'errore in i vostri appricazzioni di basa di dati. Questa stituzzioni hè a chjostica di u situ SQL messa in manipulazione è hè una parte impurtante di u sviluppu applicazioni robusta di basa di dati. TRY ... CATCH applicazione à SQL Server a partir da 2008, Azure SQL Database, Azure SQL Data Warehouse è Parallel Data Warehouse.

Attrufica TRY..CATCH

TRY ... CATCH opere cusì impediendo cusì pè spicifichi dui stati transact-SQL: quellu chì vulete "pruvà" è l'altru utilizà à "aghjunghje" alcuni errore chì puderianu arise. Quandu u SQL Server si capisce una dettazione TRY ... CATCH, averete immediatamente a frasi inklui in a preghiera TRY. Se a declarazione TRY executa concezione, SQL Server simpaticamenti si prumove. In ogni casu, se a declarazione TRY genera un errore, SQL Server realizarà a declarazione CATCH per graziamente tramite l'errore.

A sintaxia basica adopta stu furmulariu:

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

TRY ... CATCH Exemple

Hè a più faciule per capisce l'usu di sta frazzioni à l'usu di un esempiu. Imagine chì site l'amministratore di una basa di dati umani chì cuntene una tabella chjamata "Impiadati", chì cuntene l'infurmazioni annantu à ognunu di l'impiegati in a vostra organizazione. Ddu cartellu utilizate un numaru d'identità di l'empleu solu a chjave principale . Pudete tentà aduprà l'affirmate chì sia da inserisce un novu impurtanti in a vostra basa di dati:

INSERT INTO impjegati (id, first_name, last_name, extension) VALUES (12497, "Mike", "Chapple", 4201)

Circundendu circunstanze normale, sta affirmazione aghjustassi una fila à a Table di l'Impiccia. In ogni casu, si un impiigatu cù ID 12497 digià esiste in a basa di dati, inserisce a fila viaria a restrizzioni di a prighjola primaria è risultatu in issu errore:

Msg 2627, Livellu 14, State 1, Line 1 Violation of PRIMARY KEY limitations 'PK_employee_id'. Ùn pò mancu insertà chjave duoppule in l'objettu 'dbo.employees'. A dichjarazione hè stata terminata.

Mentre chì stu errore dà una infurmazioni chì avete bisognu di u prublema, ci sò dui temi cun ellu. Prima, u messagiu hè crìticu. Hè incrudui codici di errore, numeri di linea è altra informazioni inintelligibili à u usu mediu. Sicunna, e più impurtante, pruvucarà a dichjarazione di abortà è puderia causà una chjuda di l'appiccicazione.

L'alternativu hè per atteggerà a dichjarazione in una TRY ... CATCH statement, cum'è nimu quì sottu:

BEGIN TRY INSERT INTO employees (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Un error occurred creating a new employee record.', @subject = 'Duplication Error ID Employee'; END CATCH

In questu esempiu, qualsiasi errore chì si trovanu sò informati à l'utente chì eseguisce l'cumanda è l'indirizzu email hr@foo.com. U errore mostra à l'utilizatore hè quì sottu:

Errore: Violazione di PRIMARIA KEY cunfrute 'PK_employee_id'. Ùn pò mancu insertà chjave duoppule in l'objettu 'dbo.employees'. Mail cu cacheu.

A più impurtante, l'esecutzione di l'infurzione siveru per sempre, permettenu à u programatore per trattà graziamente l'errore. U utilizazione di a TRY ... CATCH hè una forma eleganti per detettà proattivu è gestione i errore chì si sò in l'appruvazioni di basa di dati SQL.

Appena più

Se vulete sapè più nantu à a Lingua Query Strutture, leghjite Introduzione à SQL .