OVH Cloud OVH Cloud

Delete Trigger

2 réponses
Avatar
Fernand St-Georges
J'ai deux tables qui portent les noms TRANSACTION et LIGNE_TRANSACTION.
J'ai un TOTAL de ligne de transaction et un SOUS-TOTAL de transaction.

Le trigger suivant ne provoquent pas les résultats escomptés. Pourtant, le
trigger insert et le trigger update, construits de la même "façon" font bien
leur travail.

Quelqu'un pourrait-il me dire ce que ce trigger a d'anormal?

merci

CREATE TRIGGER SUPPRIME_LIGNE_TRANS ON [LIGNE_TRANSACTION]
FOR DELETE
as

DECLARE @nb_heure float,
@tarif_analyste float,
@montant_sous_total float,
@sous_total float,
@taux_tvq_maj float,
@taux_tps_maj float,
@total_ligne_sup float

/* Sélectionner la valeur des taxes*/
SELECT @taux_tps_maj = [TAXE].TPS
FROM TAXE

SELECT @taux_tvq_maj = [TAXE].TVQ
FROM TAXE

/* Sélectionner le total de la ligne de transaction avant sa mise à jour */
SELECT @total_ligne_sup = TOTAL
FROM deleted LIGNE_TRANSACTION


SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
join [LIGNE_TRANSACTION] on [TRANSACTION].NUMERO_TRANSACTION =
[LIGNE_TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE = [LIGNE_TRANSACTION].NUMERO_LIGNE


UPDATE [TRANSACTION]
SET SOUS_TOTAL = ((@sous_total) - (@total_ligne_sup)),
TPS = (@taux_tps_maj *((@sous_total - @total_ligne_sup))),
TVQ = ((((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj),
TOTAL = ((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup))) + ((((@sous_total - @total_ligne_sup))
+ (@taux_tps_maj *((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj)

FROM [LIGNE_TRANSACTION]
join [TRANSACTION] on [LIGNE_TRANSACTION].NUMERO_TRANSACTION =
[TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE =
[LIGNE_TRANSACTION].NUMERO_LIGNE

2 réponses

Avatar
Laurent MOREAU
Je pense que tu as une erreur ici:
SELECT @total_ligne_sup = TOTAL FROM deleted LIGNE_TRANSACTION

Tu voulais surement écrire:
SELECT @total_ligne_sup = TOTAL FROM deleted


Dans les requetes qui suivent, je ne vois pas trop pourquoi tu jointes
LIGNE_TRANSACTION sur deleted
puisque deleted va contenir tes LIGNE_TRANSACTION supprimés

Donc a la place de:
SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
join [LIGNE_TRANSACTION] on [TRANSACTION].NUMERO_TRANSACTION [LIGNE_TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE = [LIGNE_TRANSACTION].NUMERO_LIGNE

SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
INNER JOIN deleted
ON [TRANSACTION].NUMERO_TRANSACTION = deleted.NUMERO_TRANSACTION


idem pour ton UPDATE [Transaction]




Laurent.





"Fernand St-Georges" wrote in message
news:YLfyd.30981$
J'ai deux tables qui portent les noms TRANSACTION et LIGNE_TRANSACTION.
J'ai un TOTAL de ligne de transaction et un SOUS-TOTAL de transaction.

Le trigger suivant ne provoquent pas les résultats escomptés. Pourtant,


le
trigger insert et le trigger update, construits de la même "façon" font


bien
leur travail.

Quelqu'un pourrait-il me dire ce que ce trigger a d'anormal?

merci

CREATE TRIGGER SUPPRIME_LIGNE_TRANS ON [LIGNE_TRANSACTION]
FOR DELETE
as

DECLARE @nb_heure float,
@tarif_analyste float,
@montant_sous_total float,
@sous_total float,
@taux_tvq_maj float,
@taux_tps_maj float,
@total_ligne_sup float

/* Sélectionner la valeur des taxes*/
SELECT @taux_tps_maj = [TAXE].TPS
FROM TAXE

SELECT @taux_tvq_maj = [TAXE].TVQ
FROM TAXE

/* Sélectionner le total de la ligne de transaction avant sa mise à jour


*/
SELECT @total_ligne_sup = TOTAL
FROM deleted LIGNE_TRANSACTION


SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
join [LIGNE_TRANSACTION] on [TRANSACTION].NUMERO_TRANSACTION > [LIGNE_TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE = [LIGNE_TRANSACTION].NUMERO_LIGNE


UPDATE [TRANSACTION]
SET SOUS_TOTAL = ((@sous_total) - (@total_ligne_sup)),
TPS = (@taux_tps_maj *((@sous_total - @total_ligne_sup))),
TVQ = ((((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj),
TOTAL = ((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup))) + ((((@sous_total -


@total_ligne_sup))
+ (@taux_tps_maj *((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj)

FROM [LIGNE_TRANSACTION]
join [TRANSACTION] on [LIGNE_TRANSACTION].NUMERO_TRANSACTION > [TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE > [LIGNE_TRANSACTION].NUMERO_LIGNE




Avatar
Fernand St-Georges
Tu as parfaitement raison Laurent, merci

Fernand

"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le message
de news: cqeinl$2f9$
Je pense que tu as une erreur ici:
SELECT @total_ligne_sup = TOTAL FROM deleted LIGNE_TRANSACTION

Tu voulais surement écrire:
SELECT @total_ligne_sup = TOTAL FROM deleted


Dans les requetes qui suivent, je ne vois pas trop pourquoi tu jointes
LIGNE_TRANSACTION sur deleted
puisque deleted va contenir tes LIGNE_TRANSACTION supprimés

Donc a la place de:
SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
join [LIGNE_TRANSACTION] on [TRANSACTION].NUMERO_TRANSACTION > [LIGNE_TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE = [LIGNE_TRANSACTION].NUMERO_LIGNE

SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
INNER JOIN deleted
ON [TRANSACTION].NUMERO_TRANSACTION = deleted.NUMERO_TRANSACTION


idem pour ton UPDATE [Transaction]




Laurent.





"Fernand St-Georges" wrote in message
news:YLfyd.30981$
J'ai deux tables qui portent les noms TRANSACTION et LIGNE_TRANSACTION.
J'ai un TOTAL de ligne de transaction et un SOUS-TOTAL de transaction.

Le trigger suivant ne provoquent pas les résultats escomptés. Pourtant,


le
trigger insert et le trigger update, construits de la même "façon" font


bien
leur travail.

Quelqu'un pourrait-il me dire ce que ce trigger a d'anormal?

merci

CREATE TRIGGER SUPPRIME_LIGNE_TRANS ON [LIGNE_TRANSACTION]
FOR DELETE
as

DECLARE @nb_heure float,
@tarif_analyste float,
@montant_sous_total float,
@sous_total float,
@taux_tvq_maj float,
@taux_tps_maj float,
@total_ligne_sup float

/* Sélectionner la valeur des taxes*/
SELECT @taux_tps_maj = [TAXE].TPS
FROM TAXE

SELECT @taux_tvq_maj = [TAXE].TVQ
FROM TAXE

/* Sélectionner le total de la ligne de transaction avant sa mise à jour


*/
SELECT @total_ligne_sup = TOTAL
FROM deleted LIGNE_TRANSACTION


SELECT @sous_total = SOUS_TOTAL
FROM [TRANSACTION]
join [LIGNE_TRANSACTION] on [TRANSACTION].NUMERO_TRANSACTION >> [LIGNE_TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE = [LIGNE_TRANSACTION].NUMERO_LIGNE


UPDATE [TRANSACTION]
SET SOUS_TOTAL = ((@sous_total) - (@total_ligne_sup)),
TPS = (@taux_tps_maj *((@sous_total - @total_ligne_sup))),
TVQ = ((((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj),
TOTAL = ((@sous_total - @total_ligne_sup)) + (@taux_tps_maj
*((@sous_total - @total_ligne_sup))) + ((((@sous_total -


@total_ligne_sup))
+ (@taux_tps_maj *((@sous_total - @total_ligne_sup)))) * @taux_tvq_maj)

FROM [LIGNE_TRANSACTION]
join [TRANSACTION] on [LIGNE_TRANSACTION].NUMERO_TRANSACTION >> [TRANSACTION].NUMERO_TRANSACTION
join deleted ON deleted.NUMERO_LIGNE >> [LIGNE_TRANSACTION].NUMERO_LIGNE