sp_addmessage (Transact-SQL)

Si applica a:SQL Server

Archivia un nuovo messaggio di errore definito dall'utente in un'istanza del motore di database di SQL Server. I messaggi archiviati tramite sp_addmessage possono essere visualizzati tramite la vista del sys.messages catalogo.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

[ @msgnum = ] msgnum

ID del messaggio. @msgnum è int, con il valore predefinito .NULL @msgnum per i messaggi di errore definiti dall'utente può essere un numero intero compreso tra 50.001 e 2.147.483.647. La combinazione di @msgnum e @lang deve essere univoca. Se l'ID esiste già per la lingua specificata, viene restituito un errore.

[ @severity = ] gravità

Livello di gravità dell'errore. @severity è smallint, con il valore predefinito .NULL I livelli validi provengono da 1 a 25. Per altre informazioni sui livelli di gravità, vedere motore di database gravità degli errori.

[ @msgtext = ] N'msgtext'

Il testo del messaggio di errore, @msgtext è nvarchar(255), con il valore predefinito NULL.

[ @lang = ] N'lang'

Lingua del messaggio. @lang è sysname, con un valore predefinito .NULL Poiché è possibile installare più lingue nello stesso server, @lang specifica la lingua in cui viene scritto ogni messaggio. Quando @lang viene omesso, la lingua è la lingua predefinita per la sessione.

[ @with_log = ] 'with_log'

Specifica se il messaggio deve essere scritto nel registro applicazioni di Windows quando si verifica. @with_log è varchar(5), con un valore predefinito .NULL

  • Se true, l'errore viene sempre scritto nel registro applicazioni di Windows.
  • Se false, l'errore non viene sempre scritto nel registro applicazioni di Windows, ma può essere scritto, a seconda della modalità di generazione dell'errore.

Questa opzione può essere utilizzata solo dai membri del ruolo del server sysadmin .

Se un messaggio viene scritto nel registro applicazioni di Windows, viene scritto anche nel file di log degli errori motore di database.

[ @replace = ] 'replace'

Se specificato come stringa @replace, un messaggio di errore esistente viene sovrascritto con il nuovo livello di gravità e testo del messaggio. @replace è varchar(7), con un valore predefinito .NULL Questa opzione deve essere specificata se @msgnum esiste già. Se si sostituisce un messaggio in inglese negli Stati Uniti, il livello di gravità viene sostituito per tutti i messaggi in tutte le altre lingue con lo stesso @msgnum.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Set di risultati

Nessuno.

Osservazioni:

Per le versioni non in lingua inglese di SQL Server, è necessario che la versione inglese degli Stati Uniti di un messaggio esista già prima che il messaggio possa essere aggiunto usando un'altra lingua. La gravità delle due versioni del messaggio devono corrispondere.

Quando vengono localizzati messaggi che includono parametri, utilizzare i numeri di parametro che corrispondono ai parametri del messaggio originale e inserire un punto esclamativo (!) dopo ogni numero di parametro.

Messaggio originale Messaggio localizzato
Original message param 1: %s,<br />param 2: %d Localized message param 1: %1!,<br />param 2: %2!

A causa delle differenze di sintassi del linguaggio, i numeri di parametro nel messaggio localizzato potrebbero non verificarsi nella stessa sequenza del messaggio originale.

Autorizzazioni

Richiede l'appartenenza ai ruoli predefiniti del server sysadmin o serveradmin.

Esempi

R. Definire un messaggio personalizzato

Nell'esempio seguente viene aggiunto un messaggio personalizzato 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. Aggiungere un messaggio in due lingue

Nell'esempio seguente viene innanzitutto aggiunto un messaggio in inglese (Stati Uniti) e quindi viene aggiunto lo stesso messaggio in francese.

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. Modificare l'ordine dei parametri

Nell'esempio seguente viene innanzitutto aggiunto un messaggio in inglese (Stati Uniti) e quindi viene aggiunto un messaggio localizzato in cui è stato modificato l'ordine dei parametri. Nella versione localizzata del messaggio, l'ordine dei parametri è stato modificato. I parametri stringa sono in primo e secondo posto nel messaggio e il parametro numerico è terzo posto.

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