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

Returner fejlmeddelelse fra gemt procedure

Du vil måske begynde at bruge TRY..CATCH blokere dine procedurer

Så din procedure kunne omskrives 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

Bemærk også, at du kører som enkelt slette-erklæring. Det betyder, at det ikke behøver at blive pakket ind i en transaktion. Dette spørgsmål forklarer hvorfor.

Din kode bliver denne:

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

Hvorfor nu din @errMessage er altid NULL? Fordi ERROR_MESSAGE() er KUN gyldig I FANGSTBLOK. Det er skrevet i dokumentation :

Brug af TRY..CATCH i Transact-SQL fortæller dette:



  1. Produktprissammenligning i sql

  2. Kunne ikke indlæse filen eller assembly 'Oracle.DataAccess' 64 bit ODP.NET

  3. Talk-dias:Partitioneringsforbedringer i PostgreSQL 11

  4. PHP-fortolker får udefineret konstant OCI_COMMIT_ON_SUCCESS med ADODB