L'istruzione TRY … CATCH in Transact-SQL rileva e gestisce le condizioni di errore nelle applicazioni di database. Questa affermazione è la pietra angolare della gestione degli errori di SQL Server ed è una parte importante dello sviluppo di robuste applicazioni di database. PROVA … CATCH si applica a SQL Server a partire da 2008, Database SQL di Azure, Data Warehouse SQL di Azure e Data Warehouse parallelo.
Presentazione di TRY … CATCH
PROVA … CATCH consente di specificare due istruzioni Transact-SQL: una che si desidera "provare" e un'altra da utilizzare per "rilevare" eventuali errori che potrebbero verificarsi. Quando SQL Server rileva un'istruzione TRY … CATCH, esegue immediatamente la dichiarazione inclusa nella clausola TRY. Se l'istruzione TRY viene eseguita correttamente, SQL Server si sposta. Tuttavia, se l'istruzione TRY genera un errore, SQL Server esegue l'istruzione CATCH per gestire l'errore con garbo.
La sintassi di base prende questa forma:
INIZIA PROVA blocco di istruzioni FINE PROVAINIZIA CATTURAsql_statementFINE DELLA CATTURA ; È facile capire l'uso di questa affermazione attraverso un esempio. Immagina di essere l'amministratore di un database di risorse umane che contiene una tabella denominata "Dipendenti", che contiene informazioni su ciascuno dei dipendenti della tua organizzazione. Quella tabella utilizza un numero ID dipendente intero come chiave primaria. Potresti tentare di utilizzare la seguente istruzione per inserire un nuovo dipendente nel tuo database: INSERIRE I Dipendenti (id, first_name, last_name, extension)VALORI (12497, 'Mike', 'Chapple', 4201)
In circostanze normali, questa istruzione aggiungerebbe una riga alla tabella Impiegati. Tuttavia, se un dipendente con ID 12497 esiste già nel database, l'inserimento della riga violerebbe il vincolo della chiave primaria e provocherà il seguente errore: Msg 2627, livello 14, stato 1, riga 1Violazione del vincolo PRIMARY KEY "PK_employee_id". Impossibile inserire la chiave duplicata nell'oggetto "dbo.employees".La dichiarazione è stata chiusa.
Mentre questo errore ti fornisce le informazioni necessarie per risolvere il problema, ci sono due problemi con esso. Innanzitutto, il messaggio è criptico. Include codici di errore, numeri di linea e altre informazioni incomprensibili per l'utente medio. In secondo luogo, e ancora più importante, causa l'abortire dell'istruzione e potrebbe causare un arresto anomalo dell'applicazione.L'alternativa è racchiudere l'istruzione in un'istruzione TRY … CATCH, come mostrato qui: INIZIA PROVAINSERIRE I Dipendenti (id, first_name, last_name, extension)VALORI (12497, 'Mike', 'Chapple', 4201)FINE PROVAINIZIA CATTURAPRINT 'ERRORE:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Si è verificato un errore nella creazione di un nuovo record di dipendente.',@subject = 'Employee ID Duplication Error';FINE DELLA CATTURA
In questo esempio, gli errori che si verificano vengono segnalati sia all'utente che esegue il comando sia all'indirizzo di posta elettronica [email protected]. L'errore mostrato all'utente è: Errore: violazione del vincolo PRIMARY KEY "PK_employee_id". Impossibile inserire la chiave duplicata nell'oggetto "dbo.employees".Posta in coda
L'esecuzione dell'applicazione continua normalmente, consentendo al programmatore di gestire l'errore. L'utilizzo dell'istruzione TRY … CATCH è un modo elegante per rilevare e gestire in modo proattivo gli errori che si verificano nelle applicazioni di database di SQL Server. Se vuoi saperne di più su Structured Query Language, consulta Introduzione a SQL. PROVA … Esempio di CATCH
Imparare di più