Bonjours,

Je suis en face d'un grand mystère!

J'ai 2 tables :
- employe(nemp,salemb...)
- histo_salaire(champs: nemp, datsal,salemb)

Je dois faire un trigger qui:
Lorsque je change le salaire d'un employe, j'historise ce salaire dans la table histo_salaire, il doit y avoir au max 10 enregistrement dans table histo sal qui concerne cet employe.

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
create trigger histo_10_salaire_v2
on employe
for update
as
declare @noemp int
 
declare @date datetime
declare @sal float
 
if update(salemb)
begin
select @noemp=nemp from Deleted
select @sal=salemb from Deleted 
 
while (select count(*)from histo_salaire where nemp=@noemp)>10 --si appliquée à une BD vieille
	begin
	select @date=min(datsal) from histo_salaire 	
	  where nemp=@noemp
	delete from histo_salaire where datsal=@date and nemp=@noemp
	end
 
insert into histo_salaire values(@noemp,getdate(),@sal)
 
end
Jusque là tout a l'air de marcher!!
mais quand j'execute,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
update employe set salemb=40000 where nemp=1
si cela marche (une fois sur 10), il m'insert 2 fois mon employe dans la table histo_salaire, sinon me marque cette erreur:

(1 ligne(s) affectée(s))

Serveur : Msg 2627, Niveau 14, État 1, Procédure histo_10_salaire_v2, Ligne 22
Violation de la contrainte PRIMARY KEY 'PK__histo_salaire__023D5A04'. Impossible d'insérer une clé en double dans l'objet 'histo_salaire'.
L'instruction a été arrêtée.


je ne comprends pas pourquoi il me parle de clé primaire alors que ma table histo_salaire a comme clé nemp et datsal (datetime)!!

merci d'avance

claire