faire un trigger avec deux table???est ce possible??
1 réponse
bany
Salut à tous,
voila, je viens de créer mon premier trigger(et j en suis fier!!! meme si
c'est <null> je sais!)
en revanche, j ai voulu en creer un second et la, bcp moin de chance je n y
arrive pas!
c'ets surement simple, mais la je vois pas!
donc, ceci est le trigger qui fonctionne,
les 3 champs MontantNetligneCde,CoeffRemise et PrixCommande
sont ds la meme table :T_Ligne_Commande...
la question est: je veux refaire un calcul similaire, pour la meme table,
mais
faisant appel au 'PrixUnitaire' se trouvant ds une autre table???
merci d avance, et bonne nuit ou journee a tous!
moi je vois meme plus l ecran!!!
Jean jacques
le trigger test:
CREATE TRIGGER TRG_Montant_Net
ON [dbo].[T_Ligne_Commande]
FOR INSERT, UPDATE
AS
update dbo.T_Ligne_Commande
set MontantNetligneCde=
case
WHEN (CoeffRemise is NULL) and (PrixCommande is null)
THEN Null
WHEN (CoeffRemise is NULL) and (PrixCommande is not null)
THEN (PrixCommande * 1.196)
WHEN (CoeffRemise is not null) and (PrixCommande is not null)
THEN (PrixCommande * (1- CoeffRemise)* 1.196)
ELSE NULL
END
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas LETULLIER
Bonjour,
hmmm... c'est bien possible que ton trigger fonctionne, par contre, il met à jour TOUTES les lignes de ta table, non pas uniquement les lignes modifiées. Pour répondre à ton problème (d'après mon degré de compréhension), je te conseillerais l'utilisation d'un UPDATE FROM, à la fois sur la "table" INSERTED (les lignes réellement insérées/modifiées), et sur la table des prix
Exemple :
CREATE TRIGGER TRG_Montant_Net ON [dbo].[T_Ligne_Commande] FOR INSERT, UPDATE AS UPDATE dbo.T_Ligne_Commande SET MontantNetligneCde CASE WHEN (CoeffRemise is NULL) and (PrixCommande is null) THEN Null WHEN (CoeffRemise is NULL) and (PrixCommande is not null) THEN (PrixCommande * 1.196) WHEN (CoeffRemise is not null) and (PrixCommande is not null) THEN (PrixCommande * (1- CoeffRemise)* 1.196) ELSE NULL END * TableDesPrix.PrixUnitaire (Exemple) FROM dbo.T_Ligne_Commande INNER JOIN Inserted ON (dbo.T_Ligne_Commande.ClePrimaire Inserted.ClePrimaire) LEFT OUTER JOIN TableDesPrix ON (Inserted.CleDuPrix TableDesPrix.CleDuPrix)
Nicolas
"bany" a écrit dans le message de news:3fda5075$0$385$
Salut à tous,
voila, je viens de créer mon premier trigger(et j en suis fier!!! meme si c'est <null> je sais!) en revanche, j ai voulu en creer un second et la, bcp moin de chance je n
y
arrive pas! c'ets surement simple, mais la je vois pas!
donc, ceci est le trigger qui fonctionne, les 3 champs MontantNetligneCde,CoeffRemise et PrixCommande sont ds la meme table :T_Ligne_Commande...
la question est: je veux refaire un calcul similaire, pour la meme table, mais faisant appel au 'PrixUnitaire' se trouvant ds une autre table???
merci d avance, et bonne nuit ou journee a tous!
moi je vois meme plus l ecran!!!
Jean jacques
le trigger test:
CREATE TRIGGER TRG_Montant_Net ON [dbo].[T_Ligne_Commande] FOR INSERT, UPDATE AS update dbo.T_Ligne_Commande set MontantNetligneCde > case WHEN (CoeffRemise is NULL) and (PrixCommande is null) THEN Null WHEN (CoeffRemise is NULL) and (PrixCommande is not null) THEN (PrixCommande * 1.196) WHEN (CoeffRemise is not null) and (PrixCommande is not null) THEN (PrixCommande * (1- CoeffRemise)* 1.196) ELSE NULL END
Bonjour,
hmmm... c'est bien possible que ton trigger fonctionne, par contre, il met à
jour TOUTES les lignes de ta table, non pas uniquement les lignes modifiées.
Pour répondre à ton problème (d'après mon degré de compréhension), je te
conseillerais l'utilisation d'un UPDATE FROM, à la fois sur la "table"
INSERTED (les lignes réellement insérées/modifiées), et sur la table des
prix
Exemple :
CREATE TRIGGER TRG_Montant_Net ON [dbo].[T_Ligne_Commande]
FOR INSERT, UPDATE
AS
UPDATE dbo.T_Ligne_Commande
SET MontantNetligneCde CASE
WHEN (CoeffRemise is NULL) and (PrixCommande is null)
THEN Null
WHEN (CoeffRemise is NULL) and (PrixCommande is not null)
THEN (PrixCommande * 1.196)
WHEN (CoeffRemise is not null) and (PrixCommande is not null)
THEN (PrixCommande * (1- CoeffRemise)* 1.196)
ELSE
NULL
END * TableDesPrix.PrixUnitaire (Exemple)
FROM dbo.T_Ligne_Commande
INNER JOIN Inserted ON (dbo.T_Ligne_Commande.ClePrimaire Inserted.ClePrimaire)
LEFT OUTER JOIN TableDesPrix ON (Inserted.CleDuPrix TableDesPrix.CleDuPrix)
Nicolas
"bany" <bany2@ifrance.com> a écrit dans le message de
news:3fda5075$0$385$afc38c87@news.easynet.fr...
Salut à tous,
voila, je viens de créer mon premier trigger(et j en suis fier!!! meme si
c'est <null> je sais!)
en revanche, j ai voulu en creer un second et la, bcp moin de chance je n
y
arrive pas!
c'ets surement simple, mais la je vois pas!
donc, ceci est le trigger qui fonctionne,
les 3 champs MontantNetligneCde,CoeffRemise et PrixCommande
sont ds la meme table :T_Ligne_Commande...
la question est: je veux refaire un calcul similaire, pour la meme table,
mais
faisant appel au 'PrixUnitaire' se trouvant ds une autre table???
merci d avance, et bonne nuit ou journee a tous!
moi je vois meme plus l ecran!!!
Jean jacques
le trigger test:
CREATE TRIGGER TRG_Montant_Net
ON [dbo].[T_Ligne_Commande]
FOR INSERT, UPDATE
AS
update dbo.T_Ligne_Commande
set MontantNetligneCde > case
WHEN (CoeffRemise is NULL) and (PrixCommande is null)
THEN Null
WHEN (CoeffRemise is NULL) and (PrixCommande is not null)
THEN (PrixCommande * 1.196)
WHEN (CoeffRemise is not null) and (PrixCommande is not null)
THEN (PrixCommande * (1- CoeffRemise)* 1.196)
ELSE NULL
END
hmmm... c'est bien possible que ton trigger fonctionne, par contre, il met à jour TOUTES les lignes de ta table, non pas uniquement les lignes modifiées. Pour répondre à ton problème (d'après mon degré de compréhension), je te conseillerais l'utilisation d'un UPDATE FROM, à la fois sur la "table" INSERTED (les lignes réellement insérées/modifiées), et sur la table des prix
Exemple :
CREATE TRIGGER TRG_Montant_Net ON [dbo].[T_Ligne_Commande] FOR INSERT, UPDATE AS UPDATE dbo.T_Ligne_Commande SET MontantNetligneCde CASE WHEN (CoeffRemise is NULL) and (PrixCommande is null) THEN Null WHEN (CoeffRemise is NULL) and (PrixCommande is not null) THEN (PrixCommande * 1.196) WHEN (CoeffRemise is not null) and (PrixCommande is not null) THEN (PrixCommande * (1- CoeffRemise)* 1.196) ELSE NULL END * TableDesPrix.PrixUnitaire (Exemple) FROM dbo.T_Ligne_Commande INNER JOIN Inserted ON (dbo.T_Ligne_Commande.ClePrimaire Inserted.ClePrimaire) LEFT OUTER JOIN TableDesPrix ON (Inserted.CleDuPrix TableDesPrix.CleDuPrix)
Nicolas
"bany" a écrit dans le message de news:3fda5075$0$385$
Salut à tous,
voila, je viens de créer mon premier trigger(et j en suis fier!!! meme si c'est <null> je sais!) en revanche, j ai voulu en creer un second et la, bcp moin de chance je n
y
arrive pas! c'ets surement simple, mais la je vois pas!
donc, ceci est le trigger qui fonctionne, les 3 champs MontantNetligneCde,CoeffRemise et PrixCommande sont ds la meme table :T_Ligne_Commande...
la question est: je veux refaire un calcul similaire, pour la meme table, mais faisant appel au 'PrixUnitaire' se trouvant ds une autre table???
merci d avance, et bonne nuit ou journee a tous!
moi je vois meme plus l ecran!!!
Jean jacques
le trigger test:
CREATE TRIGGER TRG_Montant_Net ON [dbo].[T_Ligne_Commande] FOR INSERT, UPDATE AS update dbo.T_Ligne_Commande set MontantNetligneCde > case WHEN (CoeffRemise is NULL) and (PrixCommande is null) THEN Null WHEN (CoeffRemise is NULL) and (PrixCommande is not null) THEN (PrixCommande * 1.196) WHEN (CoeffRemise is not null) and (PrixCommande is not null) THEN (PrixCommande * (1- CoeffRemise)* 1.196) ELSE NULL END