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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
ALTER TRIGGER [dbo].[EV_OCI_ARTSTOCK]
ON [dbo].[F_ARTSTOCK]
FOR UPDATE
AS
BEGIN
declare @ref varchar(50)
DECLARE @old_qte int
DECLARE @old_MontSto money
DECLARE @new_qte int
DECLARE @new_MontSto money
-- inutile si pas d'update de la colonne visée
IF NOT UPDATE(AS_QTESTO)
RETURN
DECLARE INS_curseur CURSOR FORWARD_ONLY READ_ONLY FOR
SELECT AR_REF, AS_QteSto, AS_MontSto
FROM INSERTED
OPEN INS_curseur
FETCH NEXT FROM INS_curseur
INTO @ref, @new_qte, @new_MontSto
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- stocke les anciennes valeurs
SELECT @old_qte = F_ARTSTOCK.AS_QteSto, @old_MontSto = F_ARTSTOCK.AS_MontSto
FROM F_ARTSTOCK
WHERE F_ARTSTOCK.AR_REF = @ref
INSERT INTO OCI_MVTSTOCK (AR_REF, Heure, QTE_AV, CMUP_AV, QTE_AP, CMUP_AP)
values (@ref, getdate(), @old_qte, @old_MontSto, @new_qte, @new_MontSto)
-- rollback en cas d'erreur
IF @@Error <> 0
ROLLBACK TRANSACTION
FETCH NEXT FROM INS_curseur
INTO @ref, @new_qte, @new_MontSto
END
END |
Partager