J'essaie de créer un trigger qui récupère les lignes supprimées ou modifiées du Docligne et les stocker dans une table F_DoclignHist
- Code: Tout sélectionner
CREATE TRIGGER Trace_User ON dbo.F_DOCLIGNE
for UPDATE, DELETE as
DECLARE @User_op varchar(50)
DECLARE @op_type varchar(10)
DECLARE @Date_op smalldatetime
DECLARE @Date_saisieOld smalldatetime
DECLARE @inc int
SELECT @user_op = nt_username, @Date_op = getdate() FROM
master..sysprocesses WHERE spid=@@SPID
if EXISTS(SELECT * FROM DELETED)
begin
delete from f_doclignhist_tmp
if exists (select * from inserted)
begin
set @op_type='MODIF'
INSERT into f_doclignhist_tmp (op_type, date_op, user_op, DO_Piece, DO_Date, DL_ligne, AR_ref, DL_design, DL_Qte,DL_Remise01REM_Valeur,DL_PrixUnitaire,DL_No, utilisateur)
Select @op_type, @date_op, @user_op, d.DO_Piece, d.DO_Date, d.DL_ligne, d.Ar_Ref, d.DL_design, d.DL_Qte, d.DL_Remise01REM_Valeur, d.DL_PrixUnitaire, d.DL_No, d.utilisateur
FROM DELETED d
end
else
begin
set @op_type='SUPPR'
INSERT into f_doclignhist_tmp (op_type, date_op, user_op, DO_Piece, DO_Date, DL_ligne, AR_ref, DL_design, DL_Qte,DL_Remise01REM_Valeur,DL_PrixUnitaire,DL_No, utilisateur)
Select @op_type, @date_op, @user_op, d.DO_Piece, d.DO_Date, d.DL_ligne, d.Ar_Ref, d.DL_design, d.DL_Qte, d.DL_Remise01REM_Valeur, d.DL_PrixUnitaire, d.DL_No, d.utilisateur
FROM deleted d
end
end
insert into f_doclignhist select * from f_doclignhist_tmp
Le Problème que ça marche bien pour la suppression. Cependant lors de la modification, le trigger ajoute deux lignes, respectivement celles avant et après la modification.
Pourtant, la table temporaire F_doclignhist_tmp contient toujours une et une seule ligne.
quelq'un peut m'aider?


