共用方式為


sp_addmessage (Transact-SQL)

將新的使用者自訂錯誤訊息儲存在 SQL Server Database Engine 的執行個體中。使用 sp_addmessage 儲存的訊息,可以透過 [sys.messages] 目錄檢視來檢視。

主題連結圖示Transact-SQL 語法慣例

語法

sp_addmessage [ @msgnum= ] msg_id , [ @severity= ] severity , [ @msgtext= ] 'msg' 
     [ , [ @lang= ] 'language' ] 
     [ , [ @with_log= ] { 'TRUE' | 'FALSE' } ] 
     [ , [ @replace= ] 'replace' ] 

引數

  • [@msgnum= ] msg_id
    這是訊息的識別碼。msg_id 是 int,預設值是 NULL。使用者自訂錯誤訊息的 msg_id 可以是 50,001 和 2,147,483,647 之間的整數。msg_id 和 language 組合必須是唯一的;如果指定語言的識別碼已經存在,就會傳回錯誤。

  • [@severity = ]severity
    這是錯誤的嚴重性層級。severity 是 smallint,預設值是 NULL。有效層級是 1 至 25。如需有關嚴重性的詳細資訊,請參閱<Database Engine 錯誤嚴重性>。

  • [@msgtext = ] 'msg'
    這是錯誤訊息的文字。msg 是 nvarchar(255),預設值是 NULL。

  • [@lang = ] 'language'
    這是這個訊息的語言。language 是 sysname,預設值是 NULL。由於相同伺服器可以安裝多重語言,因此,language 指定用來撰寫每個訊息的語言。當省略 language 時,language 是工作階段的預設語言。

  • [@with_log = ] { 'TRUE' | 'FALSE' }
    這是指當訊息出現時,是否將訊息寫入 Windows 應用程式記錄檔中。@with_log 是 varchar(5) ,預設值是 FALSE。如果是 TRUE,錯誤一律會寫入 Windows 應用程式記錄檔中。如果是 FALSE,錯誤就不一定會寫入 Windows 應用程式記錄檔中,但隨著錯誤的產生方式而不同,也可能會寫入。只有系統管理員 (sysadmin) 伺服器角色的成員可以使用這個選項。

    [!附註]

    如果訊息寫入 Windows 應用程式記錄檔中,它也會寫入 Database Engine 錯誤記錄檔中。

  • [@replace = ] 'replace'
    如果指定為 replace 字串,就會用新的訊息文字和嚴重性層級來覆寫現有的錯誤訊息。replace 是 varchar(7),預設值是 NULL。如果 msg_id 已經存在,就必須指定這個選項。如果您取代 U.S. English 訊息,就會取代有相同 msg_id 的所有其他語言中之所有訊息的嚴重性層級。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

如果是 SQL Server 的非英文版本,訊息的 U.S. English 版本必須已存在,之後才能利用其他語言來加入訊息。兩個版本的訊息,嚴重性必須相符。

當您將包含參數的訊息當地語系化時,請使用對應於原始訊息中之參數的參數號碼。請在每個參數號碼之後,插入驚歎號 (!)。

原始訊息

當地語系化的訊息

'Original message param 1: %s,

param 2: %d'

'Localized message param 1:%1!,

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. 加入兩種語言的訊息

下列範例會先加入 U.S. English 的訊息,再加入法文的相同訊息。

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. 變更參數的順序

下列範例會先加入 U.S. English 的訊息,再加入變更了參數順序的當地語系化訊息。

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 = 
        -- In the localized version of the message,
        -- the parameter order has changed. The 
        -- string parameters are first and second
        -- place in the message, and the numeric 
        -- parameter is third place.
        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') -- error, severity, state,
GO                                       -- parameters.

-- Changing the session language to use the German
-- version of the error message.
SET LANGUAGE German;
GO

RAISERROR(60000,1,1,15,'param1','param2') -- error, severity, state, 
GO                                       -- parameters.