L'instruction SQL RAISERROR est utilisée pour envoyer un message personnalisé à l'application cliente. Il peut également être utilisé pour déboguer l'application et s'applique au mécanisme de gestion des erreurs.
Syntaxe et paramètres de l'instruction SQL RAISERROR
La syntaxe de l'instruction SQL RAISERROR est la suivante :
RAISERROR ( { message_text | message_id | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
[ WITH option [ ,...n ] ];
Vous trouverez ci-dessous l'explication des paramètres du mot-clé RAISERROR que vous pouvez spécifier :
message_text – le message que vous souhaitez afficher en cas d'erreur. Remarque : Nous pouvons ajouter des messages personnalisés pour afficher les informations d'erreur. Voir l'explication dans la deuxième section de l'article.
id_message – l'identifiant du message d'erreur. Si vous souhaitez afficher le message défini par l'utilisateur, vous devez le définir. Afficher la liste des message_ids dans le sys.messages DMV .
Requête
select * from sys.messages
Le résultat :
gravité – la gravité d'une erreur. Le type de données de la gravité variable est smallint , et les valeurs sont comprises entre 0 et 25. Les valeurs valides de la gravité de l'erreur sont les suivantes :
- 0-10 – messages d'information
- 11-18 – erreurs
- 19-25 – erreurs fatales
Remarque : Si vous créez un message défini par l'utilisateur, la gravité spécifiée dans le message défini par l'utilisateur sera remplacée par la gravité spécifiée dans l'instruction RAISERROR.
état – le numéro d'identification unique que vous pouvez utiliser pour identifier la section de code à l'origine de l'erreur. Le type de données du paramètre d'état est smallint , et les valeurs sont comprises entre 0 et 255.
Passons maintenant aux exemples pratiques.
Exemple 1 :Utiliser l'instruction SQL Server RAISERROR pour imprimer la sortie
Dans cet exemple, vous pouvez voir comment nous pouvons afficher le message d'erreur ou d'information à l'aide de l'instruction RAISERROR.
Supposons que vous souhaitiez afficher le message après avoir inséré des enregistrements dans la table. Nous pouvons utiliser les instructions SQL PRINT ou RAISERROR. Voici le code :
SET nocount ON
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('OPD00006',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( 'Patient detail added successfully',1,1)
Le résultat :
Comme vous pouvez le voir dans l'image ci-dessus, l'ID de message est 50000 car il s'agit d'un message défini par l'utilisateur.
Exemple 2 :Instruction SQL RAISERROR avec le texte de message dynamique
Maintenant, voyons comment nous pouvons créer le texte de message dynamique pour l'instruction SQL RAISERROR.
Supposons que nous voulions imprimer l'ID du patient dans le message. J'ai défini la variable locale nommée @PatientID , qui contient le patient_id . Pour afficher la valeur de @patientID variable dans le texte du message, nous pouvons utiliser le code suivant :
DECLARE @PatientID VARCHAR(15)
DECLARE @message NVARCHAR(max)
SET @PatientID='OPD00007'
SET @message ='Patient detail added successfully. The OPDID is %s'
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('' + @PatientID + '',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( @message,1,1,@patientID)
Le résultat :
Pour afficher la chaîne dans l'instruction RAISERROR, nous devons utiliser les instructions d'impression de style C.
Comme vous pouvez le voir dans l'image ci-dessus, à afficher le paramètre dans le texte du message, j'ai utilisé l'option %s qui affiche la valeur de chaîne du paramètre . Si vous souhaitez afficher le paramètre entier , vous pouvez utiliser l'option %d .
Utiliser SQL RAISERROR dans le bloc TRY..CATCH
Dans cet exemple, nous ajoutons SQL RAISERROR dans le bloc TRY. Lorsque nous exécutons ce code, il s'exécute dans le bloc CATCH associé. Dans le bloc CATCH, nous afficherons les détails de l'erreur invoquée.
BEGIN try
RAISERROR ('Error invoked in the TRY code block.',16,1 );
END try
BEGIN catch
DECLARE @ErrorMsg NVARCHAR(4000);
DECLARE @ErrSeverity INT;
DECLARE @ErrState INT;
SELECT @ErrorMsg = Error_message(),
@ErrSeverity = Error_severity(),
@ErrState = Error_state();
RAISERROR (@ErrorMsg,
@ErrSeverity,
@ErrState
);
END catch;
Ainsi, nous avons ajouté l'instruction RAISERROR avec la sévérité entre 11 -19. Il provoque l'exécution du bloc CATCH.
Dans le bloc CATCH, nous affichons les informations de l'erreur d'origine à l'aide de l'instruction RAISERROR.
Le résultat :
Comme vous pouvez le voir, le code a renvoyé les informations sur l'erreur d'origine.
Voyons maintenant comment ajouter un message personnalisé à l'aide de sp_addmessage procédure stockée.
procédure stockée sp_addmessage
Nous pouvons ajouter le message personnalisé en exécutant le sp_addmessages procédure stockée. La syntaxe est :
EXEC Sp_addmessage
@msgnum= 70001,
@severity=16,
@msgtext='Please enter the numeric value',
@lang=NULL,
@with_log='TRUE',
@replace='Replace';
@msgnum : Spécifiez le numéro du message. Le type de données du paramètre est un entier. Il s'agit d'un ID de message pour le message défini par l'utilisateur.
@gravité : Spécifiez le niveau de gravité de l'erreur. Les valeurs valides sont comprises entre 1 et 25. Le type de données du paramètre est smallint.
@messagetext : Spécifiez le message que vous souhaitez afficher. Le type de données du paramètre est nvarchar(255), et la valeur par défaut est NULL.
@lang : Spécifiez la langue que vous souhaitez utiliser pour afficher le message d'erreur. La valeur par défaut est NULL.
@with_log : Ce paramètre est utilisé pour écrire le message dans l'observateur d'événements. Les valeurs valides sont TRUE et FALSE. Si vous spécifiez TRUE, le message d'erreur sera écrit dans l'observateur d'événements Windows. Si vous choisissez FALSE, l'erreur ne sera pas écrite dans le journal des erreurs de Windows.
@replace : Si vous souhaitez remplacer le message d'erreur existant par un message et un niveau de gravité définis par l'utilisateur, vous pouvez spécifier le remplacement dans la procédure stockée.
Supposons que vous vouliez créer un message d'erreur qui renvoie une qualité invalide Erreur. Dans l'instruction INSERT, la valeur de product_quantity est compris entre 20 et 100. Le message doit être traité comme une erreur et la gravité est de 16.
Pour créer le message, exécutez la requête suivante :
USE master;
go
EXEC Sp_addmessage
70001,
16,
N'Product Quantity must be between 20 and 100.';
go
Une fois le message ajouté, exécutez la requête ci-dessous pour l'afficher :
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Le résultat :
Comment utiliser les messages d'erreur définis par l'utilisateur
Comme je l'ai mentionné plus tôt, nous devons utiliser message_id dans l'instruction RAISERROR pour les messages définis par l'utilisateur.
Nous avons créé un message avec l'ID 70001. L'instruction RAISERROR doit être la suivante :
USE master
go
RAISERROR (70001,16,1 );
go
Le résultat :
L'instruction RAISERROR a renvoyé le message défini par l'utilisateur.
procédure stockée sp_dropmessage
Le sp_dropmessage procédure stockée est utilisée pour supprimer les messages définis par l'utilisateur. La syntaxe est la suivante :
EXEC Sp_dropmessage @msgnum
Dans la syntaxe, @msgnum spécifie l'ID du message que vous souhaitez supprimer.
Maintenant, nous voulons supprimer le message dont l'ID est 70001 . La requête est la suivante :
EXEC Sp_dropmessage 70001
Une fois le message supprimé, lancez la requête suivante pour le visualiser :
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Le résultat :
Comme vous pouvez le voir, le message a été supprimé.
Résumé
Ainsi, nous avons exploré l'instruction RAISERROR, ses paramètres et démontré son utilisation dans des exemples pratiques. Nous avons également clarifié l'utilisation du sp_addmessage et sp_dropmessage procédures stockées. J'espère que cet article vous a apporté des informations utiles pour vos objectifs de travail.
Nous sommes toujours heureux d'entendre vos commentaires et peut-être des conseils pratiques supplémentaires si vous souhaitez les partager.