sp_addmessage (Transact-SQL)

適用於:SQL Server

將新的使用者定義錯誤訊息儲存在 SQL Server 實例 資料庫引擎 中。 使用 sp_addmessage 所儲存的訊息可以使用目錄檢視來檢視 sys.messages

Transact-SQL 語法慣例

語法

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。 有效的層級是從 125。 如需嚴重性的詳細資訊,請參閱 資料庫引擎 錯誤嚴重性

[ @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.
    Please reexecute 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