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
出力:
![](https://lh3.googleusercontent.com/hqU8MVMoGbTNU6UfLpl7Zl5RnipJepBcPtv7UvGAx5ReyEMpwy46Rir2uh6lNOvuWp7EwKYvivimxJyZppRY2Pvlb-YdFQ6pLxH00OPKMLtnTDkMT93sqmm4D9d1w67XbCRiYFB-mZpLqtenQZMni97_XBo8dPzxE3oFwuN5GRoigFxUjSMEo1IAK2Kmtw_LW4CMRg2gcpS6sbIyIU5wBUBn7Q0d8QHVcneQjcCTytq5pWICfZgsCSegy2ofOWpplif9vZvDJC5UXlmqkRD0djDo2mbh-zicuMcySPi5d-RgbdNU-1wQ0VfhqTFgZQPXXJXV122B-qpRSkUSGiokX9bellZuUq7xI0FqkoRwKiZIcCzCMinX3BjCdsIjdlxjtXEM_lMnP74f1Q4vUgGqYjWWaDL6CcGoJI45eLxhmmEPM78PxoE14BGl3tZgv0_gcw1vLnnOQIarUKD_zM-y6FVZ-WdrJOE8_L0hCKWkj2eY8ukSMMlprqSmehT8RcLT9VtHB8PaozMueDuMqQw9veg9qcHdbzuAA7QTlTKMsM82SK-o8kOwpvkzFFkwqpbV2gcxwZkEcT-1Q3xgBVh6z21y6LzDniWrx87Suy3wKUOv_kh8HfwIU61qqaJJwA1mFY2CEnjPo18-45Ri2q8fXRuSAfUBfATpc_H3BOw1wmYhVY8MLKa1z-JQV14L6bL2qrFzAeMkXmDrniTe5_ktXNs=w1097-h521-no?authuser=0.a1b2c3d4.jpg)
重大度 –エラーの重大度。 重大度のデータ型 変数 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)
出力:
![](https://lh3.googleusercontent.com/j0HiyuAbGCQeIibFui4QAgNG3vIzD-XwuEJgvim8_0jgu5Zvj02WkBtWDCyvO5T_4-N3TlF1jNKH-BzLRxdZSRF91CaODC9yL48__tV3phMOTxgOfhnkAmy7tN5PiERfeX3Z3NbOLDjnOq6qZ_pbZe8Rd_tb5GKzqeUfAzTNKmf8qceyDVLwADBUPeXfwuhmbmdhfhmxi31uG-rXLbTYZjqEQ9gBewYKw7hjgbppPUT9idA8i2svrxjAJotTgNfjnz38qA4F9zEvOg4PAAnovQ3Rct44aGtD9h9PDwWn5FL7GC0HBQZxOKpCxFRkxEnGTuLKAaDzimpndJu-umsG0otcmO85AyShOHd5Ygs0v6wRg0qZ1ELdDPoZwtZAFGDrL681HFvjUlDprYb1bnYR36xmPXBsBQ1Rvx_XjCLcslK6P7ziLOr0xwsH1G9yliyghpBlv8n6vPIWTyOZ04gGS3mssmH_YVn45GX_9DcP1vOSLSx59F4eccALM0hGXyrdNAg8ULM4lALXdIltQI816bdXlmDfOgY14yvOw7S2xikGKPnqaneMknUNAWKG3QbD1GOB8MqbWo0z0d19TKHxO4oiuB8WhpGmJGbhKaKpRJiZ7DTY_Oz09ZNH7C9pYHYYd2wTPVa2FNmEasEM2FqjkVEPBCUYiKK9Cg7t5uRsnGQZtfp0m0c7QmhMwQDT4MVI3ikpeR1OzC9Bf1NCq5ydf20=w994-h221-no?authuser=0.a1b2c3d4.jpg)
上の画像でわかるように、メッセージ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)
出力:
![](https://lh3.googleusercontent.com/fYlpDA3S49rBHISFZxSIXOYDrHQWyD5dZepfCv27ZllnlBuoSrqeRhAPUvzT-phWogfo4OaoD1pNTwuebK0Db9z9H8sAqEalhOsXZqcaO8Ey9JFXXCIkOJWLIahHzsY8Z-YaZKJDqVXHwDSZmIKbkJHOVd8qusy4R-NGqkKXGgrP-qnISLWlK4LXa9cmL-UZHwXUL0eWT0JTGYqGXIKoXWjm1StWQbdBLonnT7QHTdlj2c9YeJZ69smQaKjI_GywMdkB9nc1Zb8d7fRIx7hRzxXlIEX2rQ9JrNzd6jVPvu2HwAT2KiM88V4wjGqjyIf8zQ26T0O6PWpElzAEAtQQeIrHHCqArhM9SkvhWSBhkTT2juFK2owg3fpSFUY5VVrqsec8EbLGbYAvZ9nsbGCY--j25qj-PEb8Nic3I4QEb9ZI0HBbdCLkXrJs-Oq7PxU2whYMnJ3REMXsczP_lXQPu6JUV72ocMyeKp7Ej_Hhd0x33tqMGkP2DTU9foIXjiv_dnNT4xZlYe9PYTxAG1AtNBAZoZxhO3CERVY676YEfKuVnjqQ67qkXew5VReyKLBD5bl1QEf_RiklXKZnor_O5H2BJh-rEHdEby0Yz1s5WDsO9iGct3wPMpMlJfR4Zs0qWJZx9LuvS1k1yAhE0v_KT_iXXDguWrDeFOeYO88jWz4iFABzo5TeVlgKHe9BoGRBoPec094UMjEQZVac48VXNgc=w866-h291-no?authuser=0.a1b2c3d4.jpg)
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ステートメントを使用して元のエラーの情報を表示しています。
出力:
![](https://lh3.googleusercontent.com/UxAX923UczK7TWB-SkqRwC9Ednb1DEkc4yeyok9fx2Lo9djXMY06bSbgs7apzfwcMOWLcIvR1joQfrY8W42YG8eipHZUkO6nbQGlaCGQup3CdYpYnuoOfnlsZwE9aKHdnJHjYzmlL_Fh5S6IGJ8Ntzo0ZRkwI_2B-m__k_r0vtM5Zms2iN67FjDLNXXlVzsbIiLzZM0bfN__WzsiSkZydFzyPsgsUNjgYY6jYKNwvfjl2ywfb8KTyqZ-ofs_YQx0htgmfipfjvDy7dZhwghflgyd9axbwWlvihg0BVthvo3sCdbJ235eB4ih5K4UVADORNIXMO3sjg-JLgMbXpu_onNJ_cmRCDDpBuu2IyQDXgjVEAVnP6nS0fil4QRNx3GrIpV01KIFSeix-NfCt9OmcLaH7GWkHQAsoZG225QRzI29ZhaJob3UrGeXJ3n6HIlyLjPlkMz0aVnZUowp_1QDC7uSFMfK6lMAh8kaCRHDJquqt-wNEwRANWTQmY7C3u3GKZctCY3p_N-ldwltfXLkUMl0r6yxTIWO8_8hRnXcTBa-KeT9bL9b826IFHj57jWGYq1h3IyBDJs5KhGbd3HWb1WwCba7IeDdubglDEwVSZ3iW6m6-exB9f31KDmZPJQ_9K3L4M75yxvvBxhpFL4jsX27uUHXV2Rk2rmnFQCXGfoDb1cG_nT2HYe7U7QicoMx94zOFvYD7CsD-ey51Z7GOtU=w634-h385-no?authuser=0.a1b2c3d4.jpg)
ご覧のとおり、コードは元のエラーに関する情報を返しました。
ここで、 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
出力:
![](https://lh3.googleusercontent.com/qvt1cDdYg3fM5CNhz1qT0xKi3I3ukCkwyAeymI10U6JIVKmXW3bCYvLScVxzIz6qGeE2dgSSp_G7MMJKnUiIMzAof1JJCWSeEBNQ485xHEuj0mTrXWYe58Z_X_dobNqdNh1YFoHTAEdzjM2dExMxZADvePLWV6AnCWXThAOjPpKbT2d4rImG8vhDtivL3LyXmKtkPy7dn-VWIthKHSMBAdfkZcTAEnDf-O8ceDYUSlSB6UTE7JSY5unmyPlEubbHU7ZdbFrI2ook6xaUl8gNUSzUgFwR5fkC6a6RwDkR4160CBNDxhJr9hVg5mpIv6uDzdgWEulw5g5_-ikXGsO3141rSaSmYj9iI65yJd4sQOVyGyYwGbWyN3lKC07WBYDrdND3j83ey3MmH6p4um1t7CtRhuk30DKitmwO-X_dRn_QgjwiXBgUmQ8ITDjkUD9lxGT0LlCKiP3ye5ptC3RSzUEaZtNDaOTFnUVKcgUuuSyAJtwERtq1FT4k0Xvu9p9KsCOnobv1BcMoDnU69-uDj3TWB3KM6iPRubABiiIw-NxhyUqLsAb0zNM9MO4SeNWGoo0G3cUckw1L1Fi1QpVal6SSqhWjOiM0cq2ldWPYeIzEoFyF_ItG-0s0nj_3EGIyk1YRE33PbHRNwEzHObjEov-TiGqsf8bYcW2345Gdbd8meNU1mM8Rpq0-tVa1AikhFmNVOZvAFwH33Lhs_E5iKyA=w579-h215-no?authuser=0.a1b2c3d4.jpg)
ユーザー定義のエラーメッセージの使用方法
前述したように、 message_idを使用する必要があります ユーザー定義メッセージのRAISERRORステートメント内。
IDが70001のメッセージを作成しました。RAISERRORステートメントは次のようになります。
USE master
go
RAISERROR (70001,16,1 );
go
出力:
![](https://lh3.googleusercontent.com/1XfbzF339XsDftJtSgK2sdmT1muonVM6bJa6At6eRSnJP9a0DEV86qxZIMart-ivgaUP8fcRMmlzMrJ_OLCbuA4F6NDETKwGfBfq8Nb5VObsT2u9X6K3oFPqvXI2ruCUh1GKofrCQmH8565FxyRK44U05MpCmpH5cG5RaKE5Rw_oCJ37q55Bt8dq4RmZAncs5apBaPgrl-9OyvlfyqzPkoX6KqemNOObWKAz0yg0mJUm3b8OYUgaqc5QAo_FAfpOTiczKWAUHGgUHf7LusSF3YSh1s1B6eS7T3xvFVxms1CaImUmWgzs5DTOq9ggJ027RY1AoJE7GEqYas0B47nIfHhHxsHRpHsTaLzUSgCdmyt7UXiS_Edrflj2NYDDoOnS3vHdXaanqOK3bYQcrq2vzTJtJ4tzFYvlhfHZ9iDn7dHAzsiVdzVadlIIla0SY_FRU-_2ww2ljdMnnvHVfjGJXU_Nh0fhhUpSQRgPfDjV_XsT4B8Kd-rCPsj73Bg2C34N9rhyHrzfHqsbz2dMYD0a-LFHAo5Co1-wpWEapAyBjRTL5W4sbD0V_qNtug1lhqTOPhereV4_lwMXTzfZ4ezyCDwqs7EtifNE1OXt21U7Yb_FnB5TkOA4HsPxobuDKz88qSfnlbqZnF2UfUZeacELDfi4VR8pKhepORKZWOOi5m_Q2LN_g-KDZOXt1ZPzGiFwxcwO5rbXA44ae1U-snXt6U0=w582-h206-no?authuser=0.a1b2c3d4.jpg)
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
出力:
![](https://lh3.googleusercontent.com/nyzk7PkZt-Ey_8yHpVg_CMGKpVVxEjxqU-D6gr9pmRAThwCtjUw4y3E0d56LZ9rtRz2x9f0HVDNv-xy7QCdRLt-DJiAfQsRlnd5lnNAy6QMir_l5LVXqMMkF0C0FTLDY1_20Yx1YemeSXeVuIuLn4DWAQM_m5Lx2M57RQVGrIMMXXgJJSy-bHsQco_Zek5QN-UwszrlzZSrSP7h12XFeOWWjZ1V0ao9_wxgMHDlv-BrmDLpqb2tnw8_3yMghqEp3aI2rSKVVsIUNPg79HFXz7YiV5FQl0gx8btT6TD6bdXFP05fTYnsR1DOdTMz9xWK_aX7Z8oDg6ZRzup5fmIvu3bfMP-f6P8FTuCd5C2wOmMjXgxRT4l_aHYckROP89oUE01PMN_JqMs_E7P75cNT_VqPAguhRnwzlJ5RsxblpojpjiWXHc_LN8i-eZCEg44S_t38RQLgkS1WXijM49o2lvl2bBorV_6v6Ue_qXXtTiVoCBLhCvwhNQtmsJjm27rPj8z5o6gwCJuZTaVUWRT1IdbG3xcJhNuAubqDnP3CCrkCRkmmgRHW8UcwT9LC6YA6zHvwKIQA9k3dsI24JNg-4k7gunYD4ommebMn6SQ4BslNDy9zN3pr2RkjSUGMVtIuTiX-G9wf43sV1e-3tD9iEgx-6WVwpu03kFAWpRNJPl_uSuXKY1LSVVTW3_S-wzyvRu1YeebRt3V2do_bVwGT16Bw=w613-h184-no?authuser=0.a1b2c3d4.jpg)
ご覧のとおり、メッセージは削除されています。
概要
したがって、RAISERRORステートメントとそのパラメーターを調べ、実際の例でその使用法を示しました。 sp_addmessageの使用法も明確にしました およびsp_dropmessage ストアドプロシージャ。この記事があなたの仕事の目標に役立つ洞察をもたらしたことを願っています。
コメントや、共有したい場合は追加の実用的なヒントをいつでも喜んでお聞きします。