sp_addmessage (Transact-SQL)

S’applique à :SQL Server

Stocke un nouveau message d’erreur défini par l’utilisateur dans une instance du Moteur de base de données SQL Server. Les messages stockés à l’aide de l’utilisation sp_addmessage peuvent être affichés à l’aide de l’affichage sys.messages catalogue.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @msgnum = ] msgnum

ID du message. @msgnum est int, avec la valeur par défaut NULL. @msgnum pour les messages d’erreur définis par l’utilisateur peut être un entier compris entre 50 001 et 2 147 483 647. La combinaison de @msgnum et de @lang doit être unique ; une erreur est retournée si l’ID existe déjà pour la langue spécifiée.

[ @severity = ] gravité

Niveau de gravité de l’erreur. @severity est smallint, avec une valeur par défaut de NULL. Les niveaux valides sont à partir de 125. Pour plus d’informations sur les gravités, consultez Moteur de base de données gravité des erreurs.

[ @msgtext = ] N’msgtext'

Texte du message d'erreur. @msgtext est nvarchar(255), avec la valeur par défaut NULL.

[ @lang = ] N’lang'

Langue de ce message. @lang est sysname, avec la valeur par défaut NULL. Étant donné que plusieurs langues peuvent être installées sur le même serveur, @lang spécifie la langue dans laquelle chaque message est écrit. Lorsque @lang est omis, la langue est la langue par défaut de la session.

[ @with_log = ] 'with_log'

Spécifie si le message doit être écrit dans le journal des applications Windows lorsqu’il se produit. @with_log est varchar(5), avec la valeur par défaut NULL.

  • Si true, l’erreur est toujours écrite dans le journal des applications Windows.
  • Si false, l’erreur n’est pas toujours écrite dans le journal des applications Windows, mais peut être écrite, en fonction de la façon dont l’erreur a été générée.

Seuls les membres du rôle serveur sysadmin peuvent utiliser cette option.

Si un message est écrit dans le journal des applications Windows, il est également écrit dans le fichier journal des erreurs Moteur de base de données.

[ @replace = ] 'replace'

S’il est spécifié comme chaîne @replace, un message d’erreur existant est remplacé par le nouveau texte du message et le niveau de gravité. @replace est varchar(7), avec la valeur par défaut NULL. Cette option doit être spécifiée si @msgnum existe déjà. Si vous remplacez un message anglais américain, le niveau de gravité est remplacé pour tous les messages de toutes les autres langues qui ont la même @msgnum.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Jeu de résultats

Aucune.

Notes

Pour les versions non anglaises de SQL Server, la version anglaise américaine d’un message doit déjà exister avant que le message puisse être ajouté à l’aide d’une autre langue. Le degré de gravité des deux versions du message doit correspondre.

Lors de la localisation des messages qui contiennent des paramètres, utilisez les numéros de paramètres correspondant aux paramètres des messages d'origine. Insérez un point d'exclamation (!) après chaque numéro de paramètre.

Message d'origine Message localisé
Original message param 1: %s,<br />param 2: %d Localized message param 1: %1!,<br />param 2: %2!

En raison des différences de syntaxe de langage, les numéros de paramètre dans le message localisé peuvent ne pas se produire dans la même séquence que dans le message d’origine.

Autorisations

Nécessite l’appartenance aux rôles serveur fixe sysadmin ou serveradmin .

Exemples

R. Définir un message personnalisé

L’exemple suivant ajoute un message personnalisé à 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. Ajouter un message dans deux langues

L’exemple suivant ajoute d’abord un message en anglais américain, puis ajoute le même message dans Français.

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. Modifier l’ordre des paramètres

L'exemple suivant ajoute d'abord un message en anglais, puis un message localisé dans lequel l'ordre des paramètres est modifié. Dans la version localisée du message, l’ordre des paramètres a changé. Les paramètres de chaîne sont à la première et la deuxième place dans le message, et le paramètre numérique est le troisième rang.

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