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

簡単な例を含むSQLServerRAISERRORステートメント

    SQL RAISERRORステートメントは、カスタムメッセージをクライアントアプリケーションに送信するために使用されます。また、アプリケーションのデバッグにも使用でき、エラー処理メカニズムに適用されます。

    SQLRAISERRORステートメントの構文とパラメーター

    SQLRAISERRORステートメントの構文は次のとおりです。

    RAISERROR ( { message_text | message_id | @local_variable }  
        { ,severity ,state }  
        [ ,argument [ ,...n ] ]   
        [ WITH option [ ,...n ] ];
    

    以下に、指定できるRAISERRORキーワードパラメータの説明を示します。

    message_text –エラーに対して表示するメッセージ。 注: エラー情報を表示するカスタムメッセージを追加できます。記事の2番目のセクションで説明されているを参照してください。

    message_id –エラーメッセージのID。ユーザー定義のメッセージを表示する場合は、それを定義する必要があります。 sys.messages DMVのmessage_idsのリストを表示します

    クエリ

    select * from sys.messages

    出力:

    重大度 –エラーの重大度。 重大度のデータ型 変数 smallint 、および値は0〜25です。エラー重大度の有効な値は次のとおりです。

    • 0-10 –情報メッセージ
    • 11-18 –エラー
    • 19-25 –致命的なエラー

    ユーザー定義メッセージを作成する場合、ユーザー定義メッセージで指定された重大度は、RAISERRORステートメントで指定された重大度によって上書きされます。

    状態 –エラーの原因となっているコードセクションを識別するために使用できる一意の識別番号。 状態パラメータのデータ型 smallint 、および値は0〜255です。

    それでは、実際の例に進みましょう。

    例1:SQLServerRAISERRORステートメントを使用して出力を出力する

    この例では、RAISERRORステートメントを使用してエラーまたは情報メッセージを表示する方法を確認できます。

    テーブルにレコードを挿入した後にメッセージを表示するとします。 SQLPRINTまたはRAISERRORステートメントを使用できます。コードは次のとおりです:

    SET nocount ON 
    
    INSERT INTO tblpatients 
                (patient_id, 
                 patient_name, 
                 address, 
                 city) 
    VALUES     ('OPD00006', 
                'Nimesh Upadhyay', 
                'AB-14, Ratnedeep Flats', 
                'Mehsana') 
    
    RAISERROR ( 'Patient detail added successfully',1,1) 
    

    出力:

    上の画像でわかるように、メッセージIDはユーザー定義のメッセージであるため、50000です。

    例2:動的メッセージテキストを含むSQLRAISERRORステートメント

    次に、SQLRAISERRORステートメントの動的メッセージテキストを作成する方法を確認します。

    メッセージに患者のIDを印刷するとします。 @PatientIDという名前のローカル変数を定義しました 、patient_idを保持します 。 @patientIDの値を表示するには メッセージテキスト内の変数には、次のコードを使用できます:

    DECLARE @PatientID VARCHAR(15) 
    DECLARE @message NVARCHAR(max) 
    
    SET @PatientID='OPD00007' 
    SET @message ='Patient detail added successfully. The OPDID is %s' 
    
    INSERT INTO tblpatients 
                (patient_id, 
                 patient_name, 
                 address, 
                 city) 
    VALUES     ('' + @PatientID + '', 
                'Nimesh Upadhyay', 
                'AB-14, Ratnedeep Flats', 
                'Mehsana') 
    
    RAISERROR ( @message,1,1,@patientID) 
    

    出力:

    RAISERRORステートメントに文字列を表示するには、Cスタイルのprintステートメントを使用する必要があります。

    上の画像でわかるように、から メッセージテキストにパラメータを表示します。%sオプションを使用しました パラメータの文字列値を表示します整数パラメータを表示する場合 、%dオプションを使用できます 。

    TRY..CATCHブロックでSQLRAISERRORを使用する

    この例では、TRYブロックにSQLRAISERRORを追加しています。このコードを実行すると、関連するCATCHブロックに対して実行されます。 CATCHブロックに、呼び出されたエラーの詳細を表示します。

    BEGIN try 
        RAISERROR ('Error invoked in the TRY code block.',16,1 ); 
    END try 
    
    BEGIN catch 
        DECLARE @ErrorMsg NVARCHAR(4000); 
        DECLARE @ErrSeverity INT; 
        DECLARE @ErrState INT; 
    
        SELECT @ErrorMsg = Error_message(), 
               @ErrSeverity = Error_severity(), 
               @ErrState = Error_state(); 
    
        RAISERROR (@ErrorMsg,
                   @ErrSeverity,
                   @ErrState 
        ); 
    END catch;
    

    したがって、重大度のRAISERRORステートメントを追加しました。 11-19の間。 CATCHブロックが実行されます。

    CATCHブロック内で、RAISERRORステートメントを使用して元のエラーの情報を表示しています。

    出力:

    ご覧のとおり、コードは元のエラーに関する情報を返しました。

    ここで、 sp_addmessageを使用してカスタムメッセージを追加する方法を理解しましょう。 ストアドプロシージャ。

    sp_addmessageストアドプロシージャ

    sp_addmessages を実行して、カスタムメッセージを追加できます。 ストアドプロシージャ。構文は次のとおりです。

    EXEC Sp_addmessage 
      @msgnum= 70001, 
      @severity=16, 
      @msgtext='Please enter the numeric value', 
      @lang=NULL, 
      @with_log='TRUE', 
      @replace='Replace'; 
    

    @msgnum: メッセージ番号を指定します。パラメータのデータ型は整数です。ユーザー定義メッセージのメッセージIDです。

    @severity: エラーの重大度を指定します。有効な値は1〜25です。パラメータのデータ型はsmallintです。

    @messagetext: 表示するメッセージを指定します。パラメータのデータ型はnvarchar(255)、です。 デフォルト値はNULLです。

    @lang: エラーメッセージの表示に使用する言語を指定します。デフォルト値はNULLです。

    @with_log: このパラメータは、イベントビューアにメッセージを書き込むために使用されます。有効な値はTRUEとFALSEです。 TRUEを指定すると、エラーメッセージがWindowsイベントビューアに書き込まれます。 FALSEを選択すると、エラーはWindowsエラーログに書き込まれません。

    @replace: 既存のエラーメッセージをユーザー定義のメッセージと重大度レベルに置き換える場合は、ストアドプロシージャで置換を指定できます。

    無効な品質を返すエラーメッセージを作成するとします。 エラー。 INSERTステートメントで、 product_quantityの値 は20〜100です。メッセージはエラーとして扱われる必要があり、重大度は16です。

    メッセージを作成するには、次のクエリを実行します。

    USE master;
    go 
    EXEC Sp_addmessage 
      70001, 
      16, 
      N'Product Quantity must be between 20 and 100.'; 
    go
    

    メッセージが追加されたら、以下のクエリを実行してメッセージを表示します。

    USE master 
    go 
    SELECT * FROM   sys.messages WHERE  message_id = 70001 
    

    出力:

    >

    ユーザー定義のエラーメッセージの使用方法

    前述したように、 message_idを使用する必要があります ユーザー定義メッセージのRAISERRORステートメント内。

    IDが70001のメッセージを作成しました。RAISERRORステートメントは次のようになります。

    USE master 
    go 
    RAISERROR (70001,16,1 ); 
    go 
    

    出力:

    RAISERRORステートメントがユーザー定義メッセージを返しました。

    sp_dropmessageストアドプロシージャ

    sp_dropmessage ストアドプロシージャは、ユーザー定義のメッセージを削除するために使用されます。構文は次のとおりです。

    EXEC Sp_dropmessage @msgnum

    構文では、 @msgnum 削除するメッセージのIDを指定します。

    ここで、IDが 70001のメッセージを削除します。 。クエリは次のとおりです。

    EXEC Sp_dropmessage 70001 

    メッセージが削除されたら、次のクエリを実行してメッセージを表示します。

    USE master 
    go 
    SELECT * FROM   sys.messages WHERE  message_id = 70001 
    

    出力:

    ご覧のとおり、メッセージは削除されています。

    概要

    したがって、RAISERRORステートメントとそのパラメーターを調べ、実際の例でその使用法を示しました。 sp_addmessageの使用法も明確にしました およびsp_dropmessage ストアドプロシージャ。この記事があなたの仕事の目標に役立つ洞察をもたらしたことを願っています。

    コメントや、共有したい場合は追加の実用的なヒントをいつでも喜んでお聞きします。


    1. SQLでDateTime形式から時刻を取得するにはどうすればよいですか?

    2. SQLカーソルの操作

    3. 複数の列を持つ単一の固定テーブルと柔軟な抽象テーブル

    4. リストPostgresENUMタイプ