Mise en forme des messages RAISERROR dans SYBASE ASE 12.5
-
21-08-2019 - |
Question
Dans une procédure stockée, je suis en train de tester si un paramètre est nul ou inférieur à 1, et le cas échéant, soulever une erreur avec un message amical, et la valeur du paramètre.
Voici mon code:
IF @ID IS NULL OR @ID <= 0
BEGIN
RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
RETURN 27001
END
Ce que je voudrais revenir est soit:
"ID est 0. ID ne peut pas être nulle ou inférieure à zéro." ou "ID est nul. ID ne peut pas être nulle ou inférieure à zéro."
Je l'ai essayé la construction d'un varchar et d'élever l'erreur comme ceci:
RAISERROR 27001 @message
mais qui produit l'erreur "numéro de message 27001, passé à RAISERROR, n'existe pas dans le catalogue sysmessages."
La solution 2
Cela fonctionne, même si une valeur NULL @ID écrit comme une chaîne vide.
IF @ID IS NULL OR @ID <= 0
BEGIN
DECLARE @msg varchar(250)
SELECT @msg = 'ID is ' + Convert(varchar(15), @ID) + '. Value cannot be null or less then zero'
RAISERROR 27001 @msg
RETURN 27001
END
Autres conseils
Le problème est le suivant: Vous devez ajouter votre erreur personnalisée # dans la base de données en appelant sp_addmessage:
sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."
Vous pouvez ensuite appeler RAISERROR comme vous avez ci-dessus, ou comme celui-ci (si vous souhaitez utiliser la chaîne de message défini dans sp_addmessage):
RAISERROR 27001, @ID
EDIT: (Aborder commentaire)
Tout d'abord, si vous êtes si incliné juste registre 27001 avec un argument de position que le message:
sp_addmessage 27001, "%1"
Deuxièmement, vous n'êtes pas obligé d'afficher le message par défaut que vous avez enregistré à l'aide sp_addmessage; par exemple, cela devrait afficher un message distinct, peu importe ce que le message par défaut est:
RAISERROR 27001 @message