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

ストアドプロシージャでSQLエラーを取得する方法

    以下は、私が使用するストアド プロシージャ テンプレートの一部です:

    /*  CREATE PROCEDURE...  */
    
    DECLARE
      @ErrorMessage   varchar(2000)
     ,@ErrorSeverity  tinyint
     ,@ErrorState     tinyint
    
    /*  Additional code  */
    
    BEGIN TRY
    
    /*  Your code here  */
    
    END TRY
    
    BEGIN CATCH
        SET @ErrorMessage  = ERROR_MESSAGE()
        SET @ErrorSeverity = ERROR_SEVERITY()
        SET @ErrorState    = ERROR_STATE()
        RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
    
        BREAK
    END CATCH
    
    /*  Further cleanup code  */
    

    Try/Catch ブロックは扱いにくい場合がありますが、@@error よりもはるかに完全です。さらに重要なことは、それらの中でさまざまな error_xxx() 関数を使用できることです。ここでは、適切なエラー メッセージを変数 @ErrorMessage に格納し、エラーを再発生させるのに十分な他のデータを格納します。ここから、任意の数のオプションを利用できます。 @ErrorMessage を出力変数にしたり、特定のエラーをテストして処理したり、独自のエラー メッセージを作成したりできます (または、既存のメッセージをより明確にするために調整します。どのくらいの頻度でそれを行う必要があるかを知るのにイライラするかもしれません)。他のオプションはそれらのレベルを提示します。

    注意すべき点:状況によっては、SQL は 2 つのエラー メッセージを続けてスローします... および error_message() 通常、「オブジェクトを作成しようとして失敗しました」などのメッセージが表示され、最初のエラー メッセージに実際のエラーが表示されます。ここで、独自のエラー メッセージを作成する必要があります。



    1. MyISAMエンジンでのMySQLロールバック

    2. リストボックスのアイテムをSQLサーバーデータベースに挿入する

    3. SQLを介してアクティブユーザーをpostgreSQLデータベースに接続するにはどうすればよいですか?

    4. BOMを使用してUTF-8としてエンコードされたファイルに対してSQLPLUSスクリプトを実行することは可能ですか?