Dichiarazione di lancio del server SQL

Dichiarazione di lancio del server SQL

Gli errori sono inevitabili quando si tratta di sviluppi. È quindi un buon piano per assicurarti di implementare alcune misure in modo che gli errori non rompano la funzionalità dell'applicazione.

SQL Server ci consente di utilizzare l'istruzione Throw per aumentare un'eccezione. Trasferiamo quindi il contesto di esecuzione su un blocco di prova per gestire l'errore.

Sintassi

Il seguente frammento di codice mostra la sintassi per l'istruzione di lancio:

Lancia [errore_numer,
messaggio di errore,
stato];

Gli argomenti nella sintassi forniti includono quanto segue:

  1. Errore_number - Questo è un valore intero che determina l'eccezione sollevata. Il numero di errore deve essere compreso tra 50000 e 2147483647. Ricorda che i codici di errore sotto 50000 sono riservati al motore SQL Server.
  2. Messaggio di errore - Questo si riferisce a un valore di stringa che funge da descrizione per l'eccezione rialzata. Deve essere di tipo nvarchar.
  3. stato - L'argomento statale è un valore intero nell'intervallo da 0 a 255, indicando lo stato associato a ERROR_Message.

Nota: qualsiasi affermazione prima di una clausola di lancio deve essere chiusa con un punto e virgola. Il server SQL richiede anche che il tiro includa gli argomenti precedenti. Se l'istruzione Throw non ha gli argomenti precedenti, deve essere racchiusa all'interno di un blocco di prova/cattura.

La sintassi è la seguente:

Inizia prova
-- potenziali errori
Fine prova
Inizia Catch
-- fallo se si verifica un errore
GETTARE;
Fine Catch

Non è possibile utilizzare il carattere % nel parametro ERROR_MESSAGE. Questo perché è un personaggio riservato. Se è necessario includere il carattere%nel tuo messaggio di errore, assicurati di sfuggirlo avendo i caratteri a doppia percentuale (%%).

Esempi di istruzione SQL Server Throve

Diamo un'occhiata ad alcuni esempi della dichiarazione di lancio in azione.

SQL Server utilizzando l'istruzione Throw per lanciare un'eccezione

L'esempio seguente dimostra l'utilizzo dell'istruzione Throw per aumentare un'eccezione:

lancia 50001, '[fail] - il valore richiesto non viene trovato.', 1;

In questo esempio, utilizziamo l'istruzione Throw per aumentare un'eccezione con il codice di errore 50001 e lo stato di 1.

L'output risultante è il seguente:

Errore SQL [50001] [S0001]: [Fail] - Il valore richiesto non viene trovato.

SQL Server Resterà l'eccezione utilizzando l'istruzione Throw

Possiamo anche usare l'eccezione di lancio per recuperare l'ultima eccezione. Un codice di esempio è il seguente:

Drop tabella se esiste t;
Crea la tabella t (
id int non null Key primario,
);
Inizia prova
inserire nei valori t (id) (1);
-- lanciare un'eccezione
inserire nei valori t (id) (1);
fine prova
Inizia Catch
print ("errore catturato");
gettare;
fine cattura;

La query precedente dovrebbe stampare quanto segue:

errore catturato
Errore SQL [2627] [23000]: violazione del vincolo della chiave primaria 'pk__t__3213e83f35ad099e'. Impossibile inserire la chiave duplicata nel DBO dell'oggetto.T'. Il valore chiave duplicato è (1).

Usando il formatMessage per lanciare un messaggio personalizzato

L'esempio seguente mostra come utilizzare la funzione formatMessage per lanciare un'eccezione con un messaggio personalizzato:

Sys Exec.Sp_addmessage @msgnum = 50001,
@Severity = 20,
@msgtext = 'Un messaggio personalizzato inclusa la variabile: %d',
@Lang = 'US_ENGLISH',
@with_log = false,
@replace = null;
dichiarare @msg nvarchar (2048) = formatMessage (50001, 100);
lanciare 50001, @MSG, 1;

In questo caso, la funzione FormatMessage ci consente di aggiungere i messaggi personalizzati, comprese le variabili. Ancora una volta, puoi controllare i documenti su SQL Server SP_ADDMessage () per saperne di più.

Il messaggio di errore risultante è il seguente:

Errore SQL [50001] [S0001]: un messaggio personalizzato che include variabile: 100

Conclusione

Questo post ha discusso di come è possibile utilizzare la clausola di lancio nel server SQL per aumentare un'eccezione.

Grazie per aver letto!