sql >> データベース >  >> RDS >> Sqlserver

ストアド プロシージャからエラー メッセージを返す

    TRY..CATCH の使用を開始することをお勧めします。 手順でブロック

    したがって、手順は次のように書き換えることができます:

    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
    

    また、単一の削除ステートメントとして実行していることに注意してください。これは、トランザクションにラップする必要がないことを意味します。 これ 質問は理由を説明します

    コードは次のようになります:

    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
    

    なぜあなたの @errMessage は常に NULL ですか? ERROR_MESSAGE() のため は CATCH ブロックでのみ有効です。 ドキュメント に書かれています :

    Transact-SQL での TRY..CATCH の使用 これを伝えます:



    1. pl/sqlストアドプログラムテキストに関する質問

    2. 自己参加によるHibernate基準

    3. SQL Serverは大文字と小文字を区別しますか?

    4. jarファイルの作成後にデータベース接続が失敗する