Instruction SQL Server Throw

Instruction SQL Server Throw

Les erreurs sont inévitables en ce qui concerne les développements. C'est donc un bon plan pour vous assurer que vous avez mis en œuvre certaines mesures afin que les erreurs ne cassent pas la fonctionnalité de votre application.

SQL Server nous permet d'utiliser l'instruction Throw pour soulever une exception. Nous transférons ensuite le contexte d'exécution dans un bloc d'essai et attrape le bloc pour gérer l'erreur.

Syntaxe

L'extrait de code suivant affiche la syntaxe de l'instruction Throw:

Lancer [error_numer,
Message d'erreur,
État];

Les arguments dans la syntaxe fournis comprennent les éléments suivants:

  1. Error_number - Il s'agit d'une valeur entière qui détermine l'exception surélevée. Le numéro d'erreur doit être dans la plage de 50000 et 2147483647. N'oubliez pas que les codes d'erreur inférieurs à 50000 sont réservés au moteur SQL Server.
  2. Message d'erreur - Cela fait référence à une valeur de chaîne qui agit comme la description de l'exception surélevée. Il doit être de type nvarchar.
  3. État - L'argument de l'État est une valeur entière dans la plage de 0 à 255, désignant l'état associé à l'erreur_message.

Remarque: Toute déclaration devant une clause de lancer doit être résiliée avec un point-virgule. Le serveur SQL exige également que le lancer inclue les arguments précédents. Si l'instruction Throw n'a pas les arguments précédents, il doit être enfermé dans un bloc d'essai / capture.

La syntaxe est la suivante:

Commencer à essayer
-- erreurs potentielles
Fin d'essai
Commencer à attraper
-- Faites cela si une erreur se produit
LANCER;
Capture

Vous ne pouvez pas utiliser le caractère% dans le paramètre Error_Message. C'est parce que c'est un personnage réservé. Si vous devez inclure le caractère% dans votre message d'erreur, assurez-vous de lui échapper en ayant le double pourcentage de caractères (%%).

Exemples de déclaration de lancer SQL Server

Jetons un coup d'œil à quelques exemples de la déclaration de lancer en action.

SQL Server Utilisation de l'instruction Throw pour lancer l'exception

L'exemple suivant démontre l'utilisation de l'instruction Throw pour lever une exception:

lancer 50001, '[échoue] - la valeur demandée n'est pas trouvée.', 1;

Dans cet exemple, nous utilisons l'instruction Throw pour soulever une exception avec le code d'erreur 50001 et l'état de 1.

La sortie résultante est la suivante:

Erreur SQL [50001] [S0001]: [FAIL] - La valeur demandée n'est pas trouvée.

SQL Server RETHROWS Exception à l'aide de l'instruction Throw

Nous pouvons également utiliser l'exception de lancer pour relancer la dernière exception. Un exemple de code est le suivant:

Tableau de dépose si existe t;
Créer la table T (
id int not null clé primaire,
));
commencer à essayer
insérer dans les valeurs t (id) (1);
-- lancer une exception
insérer dans les valeurs t (id) (1);
fin d'essai
commencer à attraper
print («erreur capturée»);
lancer;
Catch de fin;

La requête précédente doit imprimer ce qui suit:

Erreur capturée
Erreur SQL [2627] [23000]: violation de la contrainte de clé primaire 'pk__t__3213e83f35ad099e'. Impossible d'insérer une clé en double dans l'objet 'dbo.t '. La valeur de clé en double est (1).

Utilisation du formatMessage pour lancer un message personnalisé

L'exemple suivant montre comment utiliser la fonction FormatMessage pour lancer une exception avec un message personnalisé:

EXEC SYS.SP_ADDMESSAGE @MSGNUM = 50001,
@severity = 20,
@msgtext = 'Un message personnalisé comprenant la variable:% D',
@lang = 'us_english',
@with_log = false,
@replace = null;
Declare @msg nvarchar (2048) = formatMessage (50001, 100);
lancer 50001, @msg, 1;

Dans ce cas, la fonction de formatMessage nous permet d'ajouter les messages personnalisés, y compris les variables. Encore une fois, vous pouvez vérifier les documents du SQL Server SP_AddMessage () pour en savoir plus.

Le message d'erreur résultant est le suivant:

Erreur SQL [50001] [S0001]: un message personnalisé comprenant la variable: 100

Conclusion

Cet article a expliqué comment vous pouviez utiliser la clause de lancer dans le serveur SQL pour lever une exception.

Merci d'avoir lu!