以前のバージョンでは、t-sqlで次のようなエラーが発生しました。
RAISERROR 50000 'My Error Message'
最新のSQL Serverでは、この構文は廃止され、RaiseError()構文に置き換えられました。
エラーを発生させる一般的な方法が欲しいのですが、これまで考えた中で最高の方法は次のとおりです。
sp_addmessage @msgnum = 50001,
@severity = 10,
@msgtext = N'My Error Message', @replace = 'REPLACE';
RAISERROR (50001, 10, 1, 'This error message is not displayed')
しかし、1000個あるため、すべてのメッセージに対してsp_addmessageを使用してエラーメッセージを作成することはできません。
カスタムメッセージでメッセージを上げるためのより良い方法は何ですか?
これはうまくいくようです:
RAISERROR('My Error Message',0,1)
実際、SQL Server 2012以降、RAISERROR
はTHROW
に置き換えられて非推奨になりました。詳細については here を参照してください。より面白い側面の1つは、Raiserrorであり、RaiseErrorではないことです。一部のサークルでは「レイズロー」と呼ばれています。
BOLからのサンプル:
USE tempdb;
GO
CREATE TABLE dbo.TestRethrow
( ID INT PRIMARY KEY
);
BEGIN TRY
INSERT dbo.TestRethrow(ID) VALUES(1);
-- Force error 2627, Violation of PRIMARY KEY constraint to be raised.
INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH
PRINT 'In catch block.';
THROW;
END CATCH;
-s%ワイルドカードを使用して、任意のストアドプロシージャから任意のメッセージを渡すことができます。if Not Exists (Select * from SysMessages where error = 62000) EXEC sp_addmessage @msgnum = 62000, @severity = 16, @msgtext = N'%s', @lang = 'us_english'
-次に、spでこのエラーを発生させることができます。
RAISERROR(62000、16、1、「エラーおよび/またはビジネスエラーテキストがここに表示されます」)