Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer le message d'erreur de la procédure stockée

Vous voudrez peut-être commencer à utiliser TRY..CATCH bloquer dans vos procédures

Ainsi, votre procédure pourrait être réécrite comme :

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

Notez également que vous exécutez une instruction de suppression unique. Cela signifie qu'il n'a pas besoin d'être enveloppé dans une transaction. Ceci la question explique pourquoi.

Votre code devient ceci :

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

Maintenant pourquoi votre @errMessage est toujours NULL ? Parce que ERROR_MESSAGE() est valide UNIQUEMENT DANS LE BLOC CATCH. C'est écrit dans la documentation :

Utilisation de TRY..CATCH dans Transact-SQL dit ceci :