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

SQL Server:元の例外番号で例外を再スローします

    次のように再スローできる場合があります:

    ..
    END TRY
    BEGIN CATCH
        DECLARE @errnum int;
        SELECT @errnum = ERROR_NUMBER();
        RAISERROR (@errnum, 16, 1);
    END CATCH
    

    ただし、ERROR_NUMBER() の sys.messages 行に %s などのプレースホルダーがあるため、意味が失われる可能性が高くなります。

    番号を含めて元のメッセージを再スローするために、このようなことを行うことができます

    ..
    END TRY
    BEGIN CATCH
        DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
        SELECT
            @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
            @errmsg = @errnum + ' ' + ERROR_MESSAGE();
        RAISERROR (@errmsg, 16, 1);
    END CATCH
    

    最初の 5 文字は元の番号です。

    ただし、ネストされたコードがある場合は、「00123 00456 エラー テキスト」になります。

    個人的には、コードが実行されないエンジン エラー (パラメーターの欠落など) とエラー (50000) を区別するために、SQL 例外番号のみを扱います。

    最後に、戻り値として渡すことができます。

    これについて質問しました:SQL Server エラー処理:例外とデータベース クライアント コントラクト



    1. ScaleGridがシドニーAWSリージョンで利用可能になりました

    2. リレーショナルデータベースのオブジェクト指向のような構造

    3. 列名でLIKEを使用する方法

    4. DjangoPostgresArrayFieldと1対多の関係