sp_addmessage (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

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

Icona di collegamento a un argomento Convenzioni 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 con valore predefinito NULL. msg_id 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 msg_id lingua deve essere univoca. Se l'ID esiste già per la lingua specificata, viene restituito un errore.

[ @severity = ]severity Livello di gravità dell'errore. severity è smallint con valore predefinito NULL. I livelli validi sono compresi tra 1 e 25. Per altre 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) con valore predefinito NULL.

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

[ @with_log = ] { 'TRUE' | 'FALSE' }Indica se il messaggio deve essere scritto nel registro Windows dell'applicazione quando si verifica. @ with_log è varchar(5) con 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. Questa opzione può essere utilizzata solo dai membri del ruolo del server sysadmin .

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 si specifica come stringa sostituire, un messaggio di errore esistente viene sovrascritto con il nuovo testo del messaggio e il nuovo livello di gravità. replace è varchar(7) con il valore predefinito NULL. Questa opzione deve essere specificata se msg_id esiste già. Se si sostituisce un messaggio in inglese (Stati Uniti), il livello di gravità viene sostituito per tutti i messaggi in tutte le altre lingue che hanno lo stesso msg_id.

Valori del codice restituito

0 (operazione completata) o 1 (operazione non riuscita)

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 o serveradmin.

Esempi

R. 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.  

Vedere anche

RAISERROR (Transact-SQL)
sp_altermessage (Transact-SQL)
sp_dropmessage (Transact-SQL)
Stored procedure di sistema (Transact-SQL)