Créer des message d'erreur dans la vérification des contraintes dans SQL SERVER 2008
J'aimerais voir de la capacité à fixer des messages d'erreur personnalisés pour les objets de CONTRAINTE, plus précisément de VÉRIFIER constrints. Que ce soit directement ou par l'intermédiaire d'un numéro d'erreur personnalisés en sysmessages.
J'ai vu des développeurs d'avoir à créer des déclencheurs. Je pense que c'est pas une bonne raison de le mettre en œuvre.
Je suis à l'aide de SQL SERVER 2008.
- J'ai peur que cela n'est pas possible. La seule manière de le faire serait d'avoir un message d'erreur personnalisé et de gérer la contrainte via un déclencheur, dans lequel vous pouvez alors générer une erreur à l'aide de votre message personnalisé
Vous devez vous connecter pour publier un commentaire.
Vous pouvez nommer votre contrainte avec un message de l'utilisateur.
Par Exemple:
Je sais que c'est un vieux post, mais j'ai trouvé quelque chose qui pourrait en faire une peu plus facile de définir clairement les messages d'erreur pour la vérification des contraintes à l'utilisateur final: les noms de vérifier les contraintes peuvent inclure des retours chariot et les sauts de ligne, de sorte que le message d'erreur peut être fait un peu plus facile à voir.
E. g. la création de la contrainte suivantes produit le message d'erreur ci-dessous. (les lignes vides entre les
[
et]
sont intentionnels, c'est à dire qu'ils sont partie du nom de la contrainte.)Et lorsque cette contrainte échoue, le message est:
J'ai essayé de mettre les marques dans le message d'erreur (c'est à dire nom de la contrainte), comme
<b>message</b>
et*message*
, mais en vain. Et c'est peut-être possible, mais vraiment difficile à gérer, de les utiliser pour des contraintes de clés étrangères ainsi. Je n'ai pas essayé.Il n'est donc pas un 100% solution, mais j'espère que plus facile pour l'utilisateur de voir le but de message d'erreur.
Vous ne pouvez pas directement
Une contrainte de VÉRIFICATION échoue avec un message d'erreur standard. Vous pouvez utiliser un bloc TRY/CATCH pour analyser l'erreur et de lancer votre propre (RAISERROR) ou utiliser un déclencheur.
J'aimerais vérifier d'abord si il n'a pas d'incendie, soit à l'est ou SQL dans le code client. Et bien sûr, vous laissez la contrainte là pour protéger l'intégrité des données
Donc, si vous avez une contrainte
Vous exécutez le code SQL suivant ou l'équivalent dans votre code client: