sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera felmeddelande från lagrad procedur

Du kanske vill börja använda TRY..CATCH blockera dina rutiner

Så din procedur kan skrivas om som:

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

Observera också att du kör som enkel raderingssats. Det betyder att det inte behöver slås in i en transaktion. Detta frågan förklarar varför.

Din kod blir denna:

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

Varför ditt @errMessage är alltid NULL? Eftersom ERROR_MESSAGE() gäller ENDAST I FÅNGSTBLOCK. Det är skrivet i dokumentation :

Använda TRY..CATCH i Transact-SQL säger detta:



  1. Skickar en lista över datum till en oracle db-funktion via java

  2. SQL ORDER BY flera kolumner

  3. Hur kan man jämföra mellan tider i while loop i lagrad procedur?

  4. PostgreSQL - GROUP BY-sats eller användas i en aggregerad funktion