L'Instruction SQL de la Résiliation à l'aide de l'instruction RAISERROR
(SQL 2005)
Est-il possible pour un raiserror pour mettre fin à une procédure stockée.
Par exemple, dans un système plus large, nous avons obtenu une valeur qui n'était pas prévu d'être entré dans une colonne spécifique. Dans un déclencheur de mise à jour si vous écrivez:
if exists (select * from inséré à l'endroit où testcol = 7)
commencer
raiseerror('Mon Erreur Personnalisé', 16, 1)
fin
la mise à jour de l'information est encore appliquée.
toutefois, si vous exécutez
if exists (select * from inséré à l'endroit où testcol = 7)
commencer
sélectionnez 1/0
fin
d'une division par 0 erreur est levée qu'en fait met fin à la mise à jour.
est il possible que je peux le faire avec un raiseerror afin que je puisse obtenir des messages d'erreur personnalisés en arrière?
OriginalL'auteur Bob | 2009-08-06
Vous devez vous connecter pour publier un commentaire.
Dans un déclencheur, une question, un retour en arrière, RAISERROR et de REVENIR ensuite.
voir La gestion d'erreur dans SQL Server - Déclencheur Contexte par Erland Sommarskog
Est-ce seulement valable pour une transaction? ou sont les déclencheurs trasactional?
À partir du lien que j'ai posté "Lorsque dans un déclencheur, il n'est pas nécessaire d'avoir un correspondant de l'instruction BEGIN TRANSACTION parce que chaque instruction SQL qui n'est pas dans une transaction explicite est effectivement une déclaration de transaction".
à partir de mon lien: Un déclencheur s'exécute toujours dans le contexte d'une transaction, car même si il n'y a pas de multi-déclaration de transaction en cours sur chaque INSERT, UPDATE et DELETE est de ses propres transactions dans SQL Server, et que le déclencheur est le cadre de cette opération.
OUAIS! votre don! Notre dba hass problèmes avec mouvements de sorte que nous ne tendent pas à la recherche en bas de ce chemin, je n'étais pas au courant que les déclencheurs sont tombées dans des procédures transactionnelles (bien que maintenant vous m'avez fait penser à ça c'est assez évident). Merci!
OriginalL'auteur KM.
Pouvez-vous pas simplement d'ajouter une VÉRIFIER contrainte de la colonne pour l'empêcher d'être inséré en premier lieu?
Vous pouvez également démarrer une transaction dans votre insérez la procédure stockée (si vous en avez un) et de rouler de nouveau si une erreur se produit. Cela peut être mis en œuvre avec ESSAYER, ATTRAPER dans SQL Server 2005, et évite d'avoir à utiliser un déclencheur.
OriginalL'auteur pjp
OriginalL'auteur abc
Vous devez vérifier la validité des données avant d'effectuer la mise à jour.
Les données de cet exemple est un paramètre d'entrée et cela ne devrait pas changer, sauf si la procédure stockée explicitement les changements.
Je ne connais pas la procédure stockée est la mise à jour ou si ses un tous les soirs de travail de base de données, donc je ne peux pas vérifier la valeur avant de la mettre à jour.
Voulez-vous ce mystère de l'emploi à sauter quand il essaie d'entrer cette valeur?
OriginalL'auteur DCNYAM