Generare messaggi di errore personalizzati su SQL Server

Una delle Feature più utili che SQL Server mette a disposizione dei DBA che scrivono Stored Procedure è la possibilità di utilizzare la funzione RAISERROR all'interno delle SP stesse generando codici e messaggi di errore personalizzati.

Prima di poter utilizzare questa funzionalità, si deve generare i nostri messaggi personalizzati sul Server SQL, per fare questo è necessario avere diritti da SysAdmin e utilizzare la seguente sintassi:

sp_addmessage @msgnum = 450001,
              @severity = 10,
              @msgtext = N'The mandatory parameter %s hasn''t been supplied';

@msgnum è un codice arbitrario, che è consigliabile sia maggiore di 50000 per non andare ad interferire o sostituire messaggi di sistema.

@severity è il livello di errore, più grave è l'errore maggiore il livello, 10 è un valore medio, sopra ai semplici warning e sotto agli errori di sistema gravi.

@msgtext è la stringa di errore che ovviamente deve contenere i doppi apici in sostituzione all'apice singolo (come nell'esempio hasn''t) e può se necessario contenere dei placeholder, i placeholder sono nello stile del linguaggio C, pertanto %s è una stringa, %d un intero, e poi non mi ricordo però sono certa che è scritto sui Books Online!

Il messaggio di esempio lo utilizzo nelle mie Stored Procedure per segnalare che manca un parametro obbligatorio, però potrebbero esservi molte occasioni in cui questi messaggi sono utilizzabili, per dare messaggi significativi allo sviluppatore quando utilizza una Stored procedure su un database se ad esempio sono due diverse persone che sviluppano la parte Dati e la parte Codice.

Per usare il messaggio sopra generato basta applicare il comando:

RAISERROR (450001, 10, 1, '@IDCluster');

Ed otterremo un errore con questo messaggio:

The Mandatory parameter @IDCluster hasn't been supplied

Per cancellare un eventuale messaggio di sistema che abbiamo generato possiamo utilizzare la Stored procedure sp_DropMessage:

sp_dropmessage @msgnum = 450001

Indagando un po' sui Books Online potrete trovare tutte le opzioni che si possono dare a queste 2 stored procedure per creare messaggi articolati e multilingue.

Tags: , , ,

 

Print | posted on venerdì 22 agosto 2008 13.36

Feedback

# re: Generare messaggi di errore personalizzati su SQL Server

Left by Dumblin at 19/02/2010 16.40
Gravatar Salve, ho trovato per caso questo utilissimo post che mi spiega proprio ciò che mi serve... però la query nn funziona... capisco che hai scritto qst post nel 2008 ma se per caso ci capiti di nuovo ti prego di torgliermi questo dubbio...

la query è questa:

[
SP_ADDMESSAGE @msgnum = 50001,
@severity = 5,
@msgtext = N'%s prima che nascesse il suo autore!!!';
SELECT
beppe.dbo.libri.titolo, beppe.dbo.libri.anno_pubbl,beppe.dbo.autori.nome,
beppe.dbo.autori.cognome, beppe.dbo.editori.casa_ed AS 'edizioni',
convert(varchar, beppe.dbo.autori.data_nasc, 106)AS 'nato_il'
FROM
beppe.dbo.libri
INNER JOIN
beppe.dbo.autori
ON
beppe.dbo.libri.id_autore = beppe.dbo.autori.id_autore
LEFT JOIN
beppe.dbo.editori
ON
beppe.dbo.libri.id_editore = beppe.dbo.editori.id_editore
WHERE
(
beppe.dbo.autori.nome = 'Stephen'
AND
beppe.dbo.autori.cognome = 'King'
)
OR
(
beppe.dbo.autori.nome = 'Luigi'
AND
beppe.dbo.autori.cognome = 'Pirandello'
)
OR
(
beppe.dbo.editori.casa_ed LIKE 'Mondadori%'
)
OR
(
beppe.dbo.autori.data_nasc BETWEEN '11/08/1939' AND '01/03/1945'
)

ORDER BY
beppe.dbo.libri.anno_pubbl
ASC;

SELECT beppe.dbo.libri.anno_pubbl, beppe.dbo.autori.data_nasc
FROM
beppe.dbo.libri
INNER JOIN
beppe.dbo.autori
ON
beppe.dbo.libri.id_autore = beppe.dbo.autori.id_autore
WHERE
(
convert(VARCHAR(4),beppe.dbo.libri.anno_pubbl, 126)<=
convert(VARCHAR(4), beppe.dbo.autori.data_nasc, 126)
)
RAISERROR (50001, 5, 1, 'il libro non può essere stato pubblicato');
]
e mi restituisce l'errore:ù

[Messaggio 15279, livello 16, stato 1, procedura sp_addmessage, riga 97
Prima di aggiungere la versione 'Italiano' di questo messaggio è necessario aggiungere la versione us_english.

(Righe interessate: 10)

(Righe interessate: 0)
Messaggio 18054, livello 16, stato 1, riga 55
È stato generato l'errore 500001 con gravità 5 e stato 1, tuttavia non è stato trovato alcun messaggio con tale numero di errore in sys.messages. Se il numero dell'errore è maggiore di 50000, verificare che il messaggio definito dall'utente venga aggiunto mediante sp_addmessage.]

potresti spiegarmi come risolverlo per favore??? grazie in anticipo

# re: Generare messaggi di errore personalizzati su SQL Server

Left by Dumblin at 19/02/2010 16.42
Gravatar scusa...non avevo postato la mail..
winston_red@hotmail.it
rispondi qui grazie ^^

Your comment:





 
Please add 1 and 7 and type the answer here:

Copyright © Sabrina C.

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski