sp_addmessage (Transact-SQL)sp_addmessage (Transact-SQL)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions)

Almacena un nuevo mensaje de error definido por el usuario en una instancia del Motor de base de datos de SQL ServerSQL Server Database Engine.Stores a new user-defined error message in an instance of the Motor de base de datos de SQL ServerSQL Server Database Engine. Los mensajes almacenados mediante sp_addmessage se pueden ver mediante la vista de catálogo Sys. Messages .Messages stored by using sp_addmessage can be viewed by using the sys.messages catalog view.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

[ @msgnum = ] msg_id Es el ID. del mensaje.[ @msgnum = ] msg_id Is the ID of the message. msg_id es de tipo int y su valor predeterminado es NULL.msg_id is int with a default of NULL. msg_id para los mensajes de error definidos por el usuario puede ser un entero entre 50.001 y 2.147.483.647.msg_id for user-defined error messages can be an integer between 50,001 and 2,147,483,647. La combinación de msg_id y Language debe ser única; se devuelve un error si el identificador ya existe para el idioma especificado.The combination of msg_id and language must be unique; an error is returned if the ID already exists for the specified language.

[ @severity = ]severity Es el nivel de gravedad del error.[ @severity = ]severity Is the severity level of the error. Severity es smallint con un valor predeterminado de NULL.severity is smallint with a default of NULL. Los niveles válidos son de 1 a 25.Valid levels are from 1 through 25. Para obtener más información sobre los niveles de gravedad, vea Niveles de gravedad de error del motor de base de datos.For more information about severities, see Database Engine Error Severities.

[ @msgtext = ] 'msg' Es el texto del mensaje de error.[ @msgtext = ] 'msg' Is the text of the error message. MSG es de tipo nvarchar (255) y su valor predeterminado es NULL.msg is nvarchar(255) with a default of NULL.

[ @lang = ] 'language' Es el idioma de este mensaje.[ @lang = ] 'language' Is the language for this message. Language es de tipo sysname y su valor predeterminado es NULL.language is sysname with a default of NULL. Dado que se pueden instalar varios idiomas en el mismo servidor, idioma especifica el idioma en el que se escribe cada mensaje.Because multiple languages can be installed on the same server, language specifies the language in which each message is written. Cuando se omite Language , el idioma es el idioma predeterminado de la sesión.When language is omitted, the language is the default language for the session.

[ @with_log = ] { 'TRUE' | 'FALSE' } Indica si el mensaje se debe escribir en el registro de aplicación de Windows cuando se produce.[ @with_log = ] { 'TRUE' | 'FALSE' } Is whether the message is to be written to the Windows application log when it occurs. @ with_log es de tipo VARCHAR (5) y su valor predeterminado es false.@with_log is varchar(5) with a default of FALSE. Si es TRUE, el error siempre se escribe en el registro de aplicación Windows.If TRUE, the error is always written to the Windows application log. Si es FALSE, el error no siempre se escribe en el registro de aplicación Windows, pero se puede escribir, dependiendo de cómo se haya producido el error.If FALSE, the error is not always written to the Windows application log but can be written, depending on how the error was raised. Solo los miembros del rol de servidor sysadmin pueden usar esta opción.Only members of the sysadmin server role can use this option.

Nota

Si se escribe un mensaje en el registro de aplicación Windows, también se escribe en el archivo de registro de errores del Motor de base de datosDatabase Engine.If a message is written to the Windows application log, it is also written to the Motor de base de datosDatabase Engine error log file.

[ @replace = ] 'replace' Si se especifica como la cadena que se reemplaza, un mensaje de error existente se sobrescribe con el nuevo nivel de gravedad y texto del mensaje.[ @replace = ] 'replace' If specified as the string replace, an existing error message is overwritten with new message text and severity level. Replace es de tipo VARCHAR (7) y su valor predeterminado es NULL.replace is varchar(7) with a default of NULL. Se debe especificar esta opción si msg_id ya existe.This option must be specified if msg_id already exists. Si reemplaza un mensaje en Inglés de EE. UU., el nivel de gravedad se sustituye por todos los mensajes de todos los demás idiomas que tengan el mismo msg_id.If you replace a U.S. English message, the severity level is replaced for all messages in all other languages that have the same msg_id.

Valores de código de retornoReturn Code Values

0 (correcto) o 1 (error)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

NoneNone

ObservacionesRemarks

En el caso de las versiones no inglesas de SQL ServerSQL Server, la versión en inglés de EE.UU. de un mensaje deberá existir para que pueda agregarse el mensaje en otro idioma.For non-English versions of SQL ServerSQL Server, the U.S. English version of a message must already exist before the message can be added using another language. La gravedad de las dos versiones del mensaje debe coincidir.The severity of the two versions of the message must match.

Para traducir mensajes que contienen parámetros, utilice los números de parámetro que corresponden a los parámetros del mensaje original.When localizing messages that contain parameters, use parameter numbers that correspond to the parameters in the original message. Inserte un signo de exclamación (!) detrás de cada número de parámetro.Insert an exclamation point (!) after each parameter number.

Mensaje originalOriginal message Mensaje traducidoLocalized message
‘Parámetro 1 del mensaje original: %s, 'Original message param 1: %s,

parámetro 2: %d'param 2: %d'
‘Parámetro 1 del mensaje traducido: %1!, 'Localized message param 1: %1!,

parámetro 2: %2!'param 2: %2!'

Debido a las diferencias sintácticas que existen entre los idiomas, puede que los números de los parámetros del mensaje traducido no aparezcan en la misma secuencia que en el mensaje original.Because of language syntax differences, the parameter numbers in the localized message may not occur in the same sequence as in the original message.

PermisosPermissions

Requiere la pertenencia a los roles fijos de servidor sysadmin o ServerAdmin .Requires membership in the sysadmin or serveradmin fixed server roles.

EjemplosExamples

A.A. Definir un mensaje personalizadoDefining a custom message

En el siguiente ejemplo se agrega un mensaje personalizado a Sys. messages.The following example adds a custom message to 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.B. Agregar un mensaje en dos idiomasAdding a message in two languages

En el ejemplo siguiente, primero se agrega un mensaje en inglés de EE.UU. y luego se agrega el mismo mensaje en francés.The following example first adds a message in U.S. English and then adds the same message in French.

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.C. Cambiar el orden de los parámetrosChanging the order of parameters

En el ejemplo siguiente, primero se agrega un mensaje en inglés de EE.UU. y luego se agrega un mensaje traducido con el orden de los parámetros cambiado.The following example first adds a message in U.S. English, and then adds a localized message in which the parameter order is changed.

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.  

Consulte tambiénSee Also

RAISERROR (Transact-SQL) RAISERROR (Transact-SQL)
sp_altermessage ()de Transact-SQL sp_altermessage (Transact-SQL)
sp_dropmessage (Transact-SQL) sp_dropmessage (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)System Stored Procedures (Transact-SQL)