Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fehlermeldung von gespeicherter Prozedur zurückgeben

Vielleicht möchten Sie damit beginnen, TRY..CATCH zu verwenden in Ihren Prozeduren blockieren

Ihre Prozedur könnte also umgeschrieben werden als:

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

Beachten Sie außerdem, dass Sie als einzelne Löschanweisung ausgeführt werden. Dies bedeutet, dass es nicht in eine Transaktion eingewickelt werden muss. Dies Frage erklärt warum.

Ihr Code wird zu diesem:

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

Warum nun Ihre @errMessage ist immer NULL? Weil ERROR_MESSAGE() gilt NUR IM CATCH BLOCK. Das steht in der Dokumentation :

Verwendung von TRY..CATCH in Transact-SQL sagt dies: