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
訊息的標識碼。 @msgnum 為 int,預設值為 NULL
。 @msgnum使用者定義的錯誤訊息可以是介於 50,001 到 2,147,483,647 之間的整數。 @msgnum和@lang的組合必須是唯一的;如果指定語言的標識符已經存在,則會傳回錯誤。
[ @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,必須先存在美國英文版本的訊息,才能使用其他語言新增訊息。 訊息兩個版本的嚴重性必須相符。
將包含參數的訊息當地語系化時,請使用對應至原始訊息中參數的參數編號。 在每個參數編號後面插入驚嘆號 (!)。
原始訊息 | 本地化的訊息 |
---|---|
Original message param 1: %s,<br />param 2: %d |
Localized message param 1: %1!,<br />param 2: %2! |
由於語言語法差異,當地語語語法差異,當地語語語法差異,當地語語法中的參數數位可能不會以與原始訊息中的相同順序發生。
權限
需要系統管理員或 serveradmin 固定伺服器角色中的成員資格。
範例
A. 定義自訂訊息
下列範例會將自訂訊息新增至 sys.messages
。
USE master;
GO
EXEC sp_addmessage 50001, 16,
N'Percentage expects a value between 20 and 100.
Re-run with a more appropriate value.';
GO
B. 以兩種語言新增訊息
下列範例會先以美式英文新增訊息,然後在法文中新增相同的訊息。
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. 變更參數的順序
下列範例會先以美式英文新增訊息,然後新增已本地化的訊息,以變更參數順序。 在訊息的當地語系化版本中,參數順序已變更。 字串參數位於訊息的第一和第二個位置,而數值參數是第三位。
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