sp_addmessage (Transact-SQL)

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

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @msgnum= ] msg_id
    ID del messaggio. msg_id è di tipo int e il valore predefinito è NULL. msg_id per i messaggi di errore definiti dall'utente può essere un valore integer compreso tra 50.001 e 2.147.483.647. La combinazione di msg_id e language deve essere univoca. Se l'ID esiste già per la lingua specificata, viene restituito un errore.

  • [ @severity = ]severity
    Livello di gravità dell'errore. severity è di tipo smallint e il valore predefinito è NULL. I livelli validi sono compresi tra 1 e 25. Per ulteriori informazioni sui livelli di gravità, vedere Gravità degli errori del Motore di database.

  • [ @msgtext = ] 'msg'
    Testo del messaggio di errore. msg è di tipo nvarchar(255) e il valore predefinito è NULL.

  • [ @lang = ] 'language'
    Lingua del messaggio. language è di tipo sysname e il valore predefinito è NULL. Dato che nello stesso server è possibile installare più lingue, l'argomento language specifica la lingua in cui viene scritto ogni messaggio. Se language viene omesso, viene utilizzata la lingua predefinita per la sessione.

  • [ @with_log = ] { 'TRUE' | 'FALSE' }
    Indica se il messaggio deve essere scritto nel registro applicazioni di Windows quando si verifica l'errore. @with_log è di tipo varchar(5) e il valore predefinito è FALSE. Se è TRUE, l'errore viene sempre scritto nel registro applicazioni di Windows. Se è FALSE, l'errore viene scritto nel registro applicazioni di Windows a seconda della modalità con cui è stato generato. Solo i membri del ruolo predefinito del server sysadmin possono utilizzare questa opzione.

    [!NOTA]

    Se un messaggio viene scritto nel registro applicazioni di Windows, viene registrato inoltre nel file di log degli errori di Motore di database.

  • [ @replace = ] 'replace'
    Se specificato come stringa replace, un messaggio di errore esistente viene sovrascritto con il nuovo testo del messaggio e il nuovo livello di gravità. replace è di tipo varchar(7) e il valore predefinito è NULL. È necessario specificare questa opzione se l'ID specificato nell'argomento msg_id è già esistente. Se viene sostituito un messaggio in inglese (Stati Uniti), il livello di gravità viene sostituito per i messaggi in tutte le lingue a cui è associato l'ID specificato in msg_id.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Nessuno

Osservazioni

Per le versioni non in lingua inglese di SQL Server, è necessario che un messaggio sia disponibile nella versione inglese (Stati Uniti) per poterlo aggiungere in 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,

param 2: %d'

'Messaggio localizzato param 1: %1!

param 2: %2!'

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

Autorizzazioni

È richiesta l'appartenenza ai ruoli predefiniti del server sysadmin e serveradmin.

Esempi

A. Definizione di 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. Aggiunta di 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. Modifica dell'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.

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.