Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce un messaggio di errore dalla procedura memorizzata

Potresti voler iniziare a utilizzare PROVA..CATCH bloccare le tue procedure

Quindi la tua procedura potrebbe essere riscritta come:

CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        BEGIN TRANSACTION
            DELETE
            FROM Test
            WHERE ID = @ID;
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION
        SELECT ERROR_NUMBER(), ERROR_MESSAGE();
    END CATCH
END

Inoltre, tieni presente che stai eseguendo come istruzione di eliminazione singola. Significa che non ha bisogno di essere avvolto in una transazione. Questo la domanda spiega perché.

Il tuo codice diventa questo:

CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        DELETE
        FROM Test
        WHERE ID = @ID;
    END TRY
    BEGIN CATCH
        SELECT ERROR_NUMBER(), ERROR_MESSAGE();
    END CATCH
END

Ora perché il tuo @errMessage è sempre NULLA? Perché ERROR_MESSAGE() è valido SOLO IN CATCH BLOCK. Questo è scritto nella documentazione :

Utilizzo di TRY..CATCH in Transact-SQL dice questo: