sql >> Databáze >  >> RDS >> Sqlserver

Vraťte chybovou zprávu z uložené procedury

Možná budete chtít začít používat TRY..CATCH zablokovat ve svých postupech

Takže váš postup by mohl být přepsán jako:

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

Také si prosím uvědomte, že používáte jeden příkaz delete. To znamená, že to není nutné zabalit do transakce. Toto otázka vysvětluje proč.

Váš kód bude tento:

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

Nyní proč vaše @errMessage je vždy NULL? Protože ERROR_MESSAGE() platí POUZE V BLOKOVÁNÍ ÚLOVKŮ. To je napsáno v dokumentace :

Použití TRY..CATCH v Transact-SQL říká toto:



  1. VLOŽTE ... PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE s KDE?

  2. O prvku formátu RM v Oracle

  3. Jak spojit dvě tabulky v příkazu UPDATE?

  4. PDO – Načtěte Assoc ve smyčce „zatímco“.