Nella stesura di stored procedure, risulta spesso necessario gestire eventuali errori di esecuzione della stored stessa.
Il blocco di codice sql può essere racchiuso tra
BEGIN TRY
— Codice dalla stored per la quale si vuole gestire l’errore
END TRY
BEGIN CATCH
–GESTIONE ERRORE
END CATCH
Tra il blocco del catch è possibile catturare l’esatto messaggio dell’errore. Di seguito un breve esempio:
BEGIN TRY -- supponiamo di avere una divisione per zero che causa errore -- durante l'esecuzione della stored. SELECT 1/0; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; END CATCH;
Oppure possiamo concatenare tutte le informazioni in un’unica stringa, ovvero:
DECLARE @errorString varchar(2048)
DECLARE @severity int
DECLARE @state int
BEGIN TRY -- supponiamo di avere una divisione per zero che causa errore -- durante l'esecuzione della stored. SELECT 1/0; END TRY BEGIN CATCH SET @errorString = 'Errore durante la procedura.' + CHAR(13) + 'Error number: ' + CAST(ERROR_NUMBER() as varchar) + CHAR(13) + 'Message : ' + ERROR_MESSAGE() + CHAR(13) + 'Procedure : ' + COALESCE(ERROR_PROCEDURE(), '') + CHAR(13) + 'Linea : ' + CAST(ERROR_LINE() as VARCHAR) + CHAR(13) + 'Severity : ' + CAST(ERROR_SEVERITY() as varchar) + CHAR(13) + 'Data : ' + CAST(GETDATE() as varchar) + CHAR(13) SET @severity = ERROR_SEVERITY() SET @state = ERROR_STATE() RAISERROR(@errorString, @severity, @state) END CATCH;
in questo modo verrà restituito l'errore generato dalla stored procedure