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."

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top