Bonjour!![]()
Je souhaites générer dans la base de données (sql server 200) des erreurs personnalisées portant sur des règles d'intégrité genre truc bête "Si le champ [nom] est null, [prenom] doit être 'robert' ".
==> dc si on tente d'insérer une ligne dans ma table TablePersonnes, que le champ nom est null, et que prenom est 'toto' bien hop je balance une erreur sql comme celles que l'on rencontre dans nos requetes les plus extravagantes.
Donc voici un petit bout de code qui illustre cette exemple :
(Remarque mes messages d'erreurs sont stockés dans la table Master.sysmessages)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TRIGGER TRG_INSERT_COMPTES ON dbo.comptes AFTER INSERT AS --bla bla bla bla et re bla IF((@type = 'e' AND @num_stu is null) AND @redirection is null) begin --inspiré du web bien sûr ;) set @erreurDetectee = 1 RAISERROR (60002,10,1) ROLLBACK TRANSACTION end -- etc...
Donc bon je fais un test et cela plante bien le tout comme voulu non à cause de mon RAISERROR mais à cause du fait que je ne fait pas de transaction et dc que REROLL TRANSACTION n'a pas de BEGIN TRANSACTION... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [Refmail_DataBase ; Comptes] : La valeur de [redirection] doit être non nulle si ([type]='e' et [num_stu] is null) [Refmail_DataBase ; Comptes] : La valeur de [redirection] doit être non nulle si ([type]='e' et [num_stu] is null) Serveur : Msg 3903, Niveau 16, État 1, Procédure TRG_INSERT_COMPTES, Ligne 81 La requête ROLLBACK TRANSACTION n'a pas de BEGIN TRANSACTION correspondante. L'instruction a été arrêtée.
Bon, ok, j'enlève mon REROLL TRANSACTION!!! MAis si je l'enlève du coup bien il n'y a plus de départ en erreur et le code continue son bout de chemin sans s'arrêter...
Je voudrais simplement générer un message d'erreur dans mon trigger avant l'insertion si les conditions d'insertion ne sont pas remplies, et que le code s'arrête en raison de cette erreur et pas autre chose ^^.
Genre ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [Refmail_DataBase ; Comptes] : La valeur de [redirection] doit être non nulle si ([type]='e' et [num_stu] is null) [Refmail_DataBase ; Comptes] : La valeur de [redirection] doit être non nulle si ([type]='e' et [num_stu] is null) L'instruction a été arrêtée.
Merci de votre avis sur ce pitit problème comme dirai homer!
+++
Partager