Salut tout le monde !!
comme le titre du sujet l'indique j'ai un problème avec un TRY/CATCH que j'utilise à l'intérieur d'un trigger, j'utilise un trigger de type 'instead of insert' pour vérifié que l'age et la date de naissance d'une personne sont cohérent et j'utilise un Try/catch pour traité le cas de la clé primaire Voici le code que j'utilise :
Le code avec le quel je teste le trigger :
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Create Trigger Trigger_Age_Date on Personne instead of insert as begin declare c scroll cursor for(select Code,dateN,Age from inserted) open c; declare @Code int,@Age int,@DateN date; fetch from c into @Code,@dateN,@Age while(@@FETCH_STATUS = 0) begin if (@Age <> datediff(year,@dateN,getdate())) print 'L"age et la date doivent être cohérent' Else begin Begin try insert into Personne select * from inserted where code = @Code End Try Begin Catch if ERROR_NUMBER() = 2627 print 'Le code '+cast(@Code as varchar(50))+' existe déjà.' End Catch end fetch from c into @Code,@dateN,@Age end Close C; Deallocate C; End
les clés primaire ajouté existent déjà dans la table personne alors je dois tout simplement avoir les messages qui indique que la clé(code) existe déjà, mais voila ce que je reçois :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 set dateformat dmy Insert into Personne values (10,'Nom2','15/02/2012',2),(12,'Nom2','15/02/2012',2),(5,'Nom10','15/02/2010',4)
Le message est affiché seulement pour la première insertion fausse, ensuite il a le message d'erreur (Msg 3616).(0 row(s) affected)
Le code 10 existe déjà.
(0 row(s) affected)
(0 row(s) affected)
Msg 3616, Level 16, State 1, Line 2
An error was raised during trigger execution. The batch has been aborted and the user transaction, if any, has been rolled back.
"Une erreur est survenue lors de l’exécution du déclencheur. Le lot a été abandonné et la transaction utilisateur éventuelle a été restaurée."
Merci d'avance !!
Partager