sp_addmessage (Transact-SQL)
適用対象:SQL Server
SQL Server データベース エンジンのインスタンスに新しいユーザー定義エラー メッセージを格納します。 使用 sp_addmessage
して保存されたメッセージは、カタログ ビューを sys.messages
使用して表示できます。
構文
sp_addmessage
[ [ @msgnum = ] msgnum ]
[ , [ @severity = ] severity ]
[ , [ @msgtext = ] N'msgtext' ]
[ , [ @lang = ] N'lang' ]
[ , [ @with_log = ] { 'true' | 'false' } ]
[ , [ @replace = ] 'replace' ]
[ ; ]
引数
[ @msgnum = ] msgnum
メッセージの ID。 @msgnumは int で、既定値は NULL
. ユーザー定義エラー メッセージの@msgnumは、50,001 ~ 2,147,483,647 の整数にすることができます。 @msgnumと@langの組み合わせは一意である必要があります。指定した言語の ID が既に存在する場合は、エラーが返されます。
[ @severity = ] 重大度
エラーの重大度レベル。 @severityは smallint で、既定値は NULL
. 有効なレベルは次のとおりです1
25
。 重大度の詳細については、「データベース エンジンエラーの重大度」を参照してください。
[ @msgtext = ] N'msgtext'
エラー メッセージのテキスト。 @msgtextは nvarchar(255) で、既定値は NULL
.
[ @lang = ] N'lang'
このメッセージの言語。 @langは sysname で、既定値は NULL
. 同じサーバーに複数の言語をインストールできるため、 @lang は各メッセージが書き込まれる言語を指定します。 @langを省略すると、言語はセッションの既定の言語になります。
[ @with_log = ] 'with_log'
メッセージが発生したときに Windows アプリケーション ログに書き込まれるかどうかを指定します。 @with_logは varchar(5) で、既定値は NULL
.
- の場合
true
、エラーは常に Windows アプリケーション ログに書き込まれます。 - 場合
false
、エラーは常に Windows アプリケーション ログに書き込まれるわけではありませんが、エラーの発生方法に応じて書き込むことができます。
このオプションを使用できるのは、 sysadmin サーバー ロールのメンバーだけです。
メッセージが Windows アプリケーション ログに書き込まれる場合は、データベース エンジンエラー ログ ファイルにも書き込まれます。
[ @replace = ] 'replace'
文字列 @replaceとして指定すると、既存のエラー メッセージが新しいメッセージ テキストと重大度レベルで上書きされます。 @replaceは varchar(7) で、既定値は NULL
. @msgnumが既に存在する場合 は、このオプションを 指定する必要があります。 米国英語のメッセージを置き換える場合、同じ @msgnumを持つ他のすべての言語のすべてのメッセージの重大度レベルが置き換えられます。
リターン コードの値
0
(成功) または 1
(失敗)。
結果セット
ありません。
解説
英語以外のバージョンの SQL Server では、別の言語を使用してメッセージを追加する前に、米国英語バージョンのメッセージが既に存在している必要があります。 2 つのバージョンのメッセージの重大度は同じであることが必要です。
パラメーターを含むメッセージをローカライズする場合は、元のメッセージのパラメーターに対応するパラメーター番号を使用します。 各パラメーター番号の後に感嘆符 (!) を挿入します。
元のメッセージ | ローカライズされたメッセージ |
---|---|
Original message param 1: %s,<br />param 2: %d |
Localized message param 1: %1!,<br />param 2: %2! |
言語構文の違いにより、ローカライズされたメッセージ内のパラメーター番号が元のメッセージと同じシーケンスに含まれていない可能性があります。
アクセス許可
sysadmin または serveradmin 固定サーバー ロールのメンバーシップが必要です。
例
A. カスタム メッセージを定義する
次の例では、カスタム メッセージを追加します sys.messages
。
USE master;
GO
EXEC sp_addmessage 50001, 16,
N'Percentage expects a value between 20 and 100.
Please reexecute with a more appropriate value.';
GO
B. 2 つの言語でメッセージを追加する
次の例では、最初に米国英語でメッセージを追加してから、フランス語で同じメッセージを追加します。
USE master;
GO
EXEC sp_addmessage @msgnum = 60000, @severity = 16,
@msgtext = N'The item named %s already exists in %s.',
@lang = 'us_english';
EXEC sp_addmessage @msgnum = 60000, @severity = 16,
@msgtext = N'L''élément nommé %1! existe déjà dans %2!',
@lang = 'French';
GO
C: パラメーターの順序を変更する
次の例では、まず英語のメッセージを追加し、次にパラメーターの順序を変えてローカライズされたメッセージを追加します。 ローカライズされたバージョンのメッセージでは、パラメーターの順序が変更されました。 文字列パラメーターはメッセージの 1 番目と 2 番目の場所にあり、数値パラメーターは 3 番目の場所です。
USE master;
GO
EXEC sp_addmessage
@msgnum = 60000,
@severity = 16,
@msgtext =
N'This is a test message with one numeric parameter (%d), one string parameter (%s), and another string parameter (%s).',
@lang = 'us_english';
EXEC sp_addmessage
@msgnum = 60000,
@severity = 16,
@msgtext =
N'Dies ist eine Testmeldung mit einem Zeichenfolgenparameter (%3!), einem weiteren Zeichenfolgenparameter (%2!), und einem numerischen Parameter (%1!).',
@lang = 'German';
GO
-- Changing the session language to use the U.S. English
-- version of the error message.
SET LANGUAGE us_english;
GO
RAISERROR(60000, 1, 1, 15, 'param1', 'param2')
GO
-- Changing the session language to use the German
-- version of the error message.
SET LANGUAGE German;
GO
RAISERROR(60000, 1, 1, 15, 'param1', 'param2');
GO
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示