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

