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 : 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
Le code avec le quel je teste le trigger :
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)
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 :

(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 !!