sql >> Database >  >> RDS >> Sqlserver

Foutbericht retourneren van opgeslagen procedure

Misschien wilt u beginnen met het gebruik van PROBEER..CATCH blokkade in uw procedures

Uw procedure kan dus worden herschreven 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

Houd er ook rekening mee dat u een enkele verwijderopdracht uitvoert. Het betekent dat het niet in een transactie hoeft te worden verpakt. Dit vraag legt uit waarom.

Uw code wordt dit:

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

Waarom nu uw @errMessage is altijd NULL? Omdat ERROR_MESSAGE() is ALLEEN geldig IN VANGBLOK. Dat staat in documentatie :

TRY..CATCH gebruiken in Transact-SQL vertelt dit:



  1. Hoe u SELECT ON tabelnaam GRANT naar PUBLIC in MySQL

  2. Snelste manier om een ​​verwijderquery uit te voeren in een grote tabel in PostgreSQL

  3. De Oracle-database instellen op Macbook Pro (OS X Yosemite)

  4. classNotFoundException bij laden van JDBC-stuurprogramma