sp_addmessage (Transact-SQL)

Se aplica a: SQL Server

Almacena un nuevo mensaje de error definido por el usuario en una instancia del Motor de base de datos de SQL Server. Los mensajes almacenados mediante sp_addmessage se pueden ver mediante la vista de sys.messages catálogo.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addmessage
    [ [ @msgnum = ] msgnum ]
    [ , [ @severity = ] severity ]
    [ , [ @msgtext = ] N'msgtext' ]
    [ , [ @lang = ] N'lang' ]
    [ , [ @with_log = ] { 'true' | 'false' } ]
    [ , [ @replace = ] 'replace' ]
[ ; ]

Argumentos

[ @msgnum = ] msgnum

Identificador del mensaje. @msgnum es int, con un valor predeterminado de NULL. @msgnum para los mensajes de error definidos por el usuario puede ser un entero entre 50 001 y 2 147 483 647. La combinación de @msgnum y @lang debe ser única; se devuelve un error si el identificador ya existe para el idioma especificado.

[ @severity = ] gravedad

Nivel de gravedad del error. @severity es smallint, con un valor predeterminado de NULL. Los niveles válidos son de a través 25de 1 . Para obtener más información sobre las gravedades, consulte Motor de base de datos gravedades de error.

[ @msgtext = ] N'msgtext'

Texto del mensaje de error. @msgtext es nvarchar(255), con un valor predeterminado de NULL.

[ @lang = ] N'lang'

Idioma de este mensaje. @lang es sysname, con un valor predeterminado de NULL. Dado que se pueden instalar varios idiomas en el mismo servidor, @lang especifica el idioma en el que se escribe cada mensaje. Cuando se omite @lang , el idioma es el idioma predeterminado para la sesión.

[ @with_log = ] 'with_log'

Especifica si el mensaje se va a escribir en el registro de aplicaciones de Windows cuando se produce. @with_log es varchar(5), con un valor predeterminado de NULL.

  • Si truees , el error siempre se escribe en el registro de aplicaciones de Windows.
  • Si falsees , el error no siempre se escribe en el registro de aplicaciones de Windows, pero se puede escribir, en función de cómo se produjo el error.

Solo los miembros del rol de servidor sysadmin pueden usar esta opción.

Si se escribe un mensaje en el registro de aplicaciones de Windows, también se escribe en el archivo de registro de errores de Motor de base de datos.

[ @replace = ] 'replace'

Si se especifica como la cadena @replace, se sobrescribe un mensaje de error existente con el nuevo texto del mensaje y el nivel de gravedad. @replace es varchar(7), con un valor predeterminado de NULL. Esta opción debe especificarse si @msgnum ya existe. Si reemplaza un mensaje en inglés de EE. UU., el nivel de gravedad se reemplaza por todos los mensajes de todos los demás idiomas que tienen el mismo @msgnum.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Conjunto de resultados

Ninguno.

Comentarios

En el caso de las versiones que no son en inglés de SQL Server, la versión en inglés de EE. UU. de un mensaje ya debe existir antes de que el mensaje se pueda agregar con otro idioma. La gravedad de las dos versiones del mensaje debe coincidir.

Para traducir mensajes que contienen parámetros, utilice los números de parámetro que corresponden a los parámetros del mensaje original. Inserte un signo de exclamación (!) detrás de cada número de parámetro.

Mensaje original Mensaje traducido
Original message param 1: %s,<br />param 2: %d Localized message param 1: %1!,<br />param 2: %2!

Debido a las diferencias de sintaxis del lenguaje, es posible que los números de parámetro del mensaje localizado no se produzcan en la misma secuencia que en el mensaje original.

Permisos

Requiere la pertenencia a los roles fijos de servidor sysadmin o serveradmin .

Ejemplos

A Definición de un mensaje personalizado

En el ejemplo siguiente se agrega un mensaje personalizado 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. Agregar un mensaje en dos idiomas

En el ejemplo siguiente se agrega primero un mensaje en inglés de EE. UU. y, a continuación, se agrega el mismo mensaje en francés.

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. Cambio del orden de los parámetros

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. En la versión localizada del mensaje, el orden de los parámetros ha cambiado. Los parámetros de cadena están en primer y segundo lugar en el mensaje, y el parámetro numérico es el tercer lugar.

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