Gen 09 2013

Cattura errore SQLServer – TRY CATCH – RAISERROR

Category: VarieAntonio @ 10:45


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

Rispondi