web-dev-qa-db-ja.com

SQL ServerでRAISERRORを使用してカスタムエラーメッセージを発生させる

以前のバージョンでは、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を使用してエラーメッセージを作成することはできません。

カスタムメッセージでメッセージを上げるためのより良い方法は何ですか?

14

これはうまくいくようです:

RAISERROR('My Error Message',0,1)
19

実際、SQL Server 2012以降、RAISERRORTHROWに置き換えられて非推奨になりました。詳細については 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;
18
MarkD

-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、「エラーおよび/またはビジネスエラーテキストがここに表示されます」)

0
mark