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.
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,
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
Partager