Press "Enter" to skip to content

Come Generare messaggi di errore personalizzati su SQL Server

Una delle funzionalità 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.