Problème avec l'utilisation de TRY/CATCH à l'intérieure d'un trigger
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 :
Code:
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 |
Le code avec le quel je teste le trigger :
Code:
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) |
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 :
Citation:
(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."
Le message est affiché seulement pour la première insertion fausse, ensuite il a le message d'erreur (Msg 3616).
Merci d'avance !!