Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mon 1er trigger : Problème

6 réponses
Avatar
Vincent Dartois
J'ai besoin d'utilisé pour la première fois les triggers et voilà que je but
sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à une
proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition auquel
la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que je
suis en train de mettre à jour.

Merci de votre aide.

6 réponses

Avatar
Philippe T [MS]
Bonjour,

Quelque chose comme cela ?

DECLARE @idProposition int
DECLARE @MySum money

SELECT @idProposition = idProposition FROM inserted

SELECT @MySum = SUM(dblPrixCompoProposition) AS dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = @idProposition

UPDATE tproposition
SET dblPrixProposition = @MySum
WHERE idProposition = @idProposition


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:
J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
but sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à
une proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition
auquel la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que je
suis en train de mettre à jour.

Merci de votre aide.



Avatar
Vincent Dartois
Merci !
Cela fonctionne très bien !

par contre, j'aimerais bien comprendre pourquoi ce que j'avais fais, ne
fonctionnait pas ou ne peux pas fonctionner.

"Philippe T [MS]" a écrit dans le message de
news:
Bonjour,

Quelque chose comme cela ?

DECLARE @idProposition int
DECLARE @MySum money

SELECT @idProposition = idProposition FROM inserted

SELECT @MySum = SUM(dblPrixCompoProposition) AS dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = @idProposition

UPDATE tproposition
SET dblPrixProposition = @MySum
WHERE idProposition = @idProposition


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:
J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
but sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à
une proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition
auquel la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que je
suis en train de mettre à jour.

Merci de votre aide.







Avatar
Philippe T [MS]
Bonjour,

Il aurait fallu faire un INNER JOIN sur la table inserted dans le calcul de
la somme. Quelque chose du genre :

UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition






INNER JOIN inserted ON dbo.tCompoProposition.idProposition =
inserted.idProposition)
WHERE idProposition=inserted idProposition








----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:%
Merci !
Cela fonctionne très bien !

par contre, j'aimerais bien comprendre pourquoi ce que j'avais fais, ne
fonctionnait pas ou ne peux pas fonctionner.

"Philippe T [MS]" a écrit dans le message
de news:
Bonjour,

Quelque chose comme cela ?

DECLARE @idProposition int
DECLARE @MySum money

SELECT @idProposition = idProposition FROM inserted

SELECT @MySum = SUM(dblPrixCompoProposition) AS dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = @idProposition

UPDATE tproposition
SET dblPrixProposition = @MySum
WHERE idProposition = @idProposition


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:
J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
but sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à
une proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition
auquel la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que
je suis en train de mettre à jour.

Merci de votre aide.











Avatar
Philippe T [MS]
Bonjour,

Tu as raison d'ou mon post précédent avec le même INNER JOIN que le tient
!!!

----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Fred BROUARD" wrote in message
news:
Oh philippe, c'est horrible ce que tu fais... Car ça va pas marvhé en cas
de mise à jour de plusieurs tuples simultanés !

Voici quelque chose de plus "ensembliste"...

ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= SUM(dblPrixCompoProposition)
FROM dbo.tCompoProposition CP
INNER JOIN inserted i ON CP.idProposition = i.idProposition
GROUP BY CP.idProposition, i.idProposition
END

A +

Philippe T [MS] a écrit:
Bonjour,

Quelque chose comme cela ?

DECLARE @idProposition int
DECLARE @MySum money

SELECT @idProposition = idProposition FROM inserted

SELECT @MySum = SUM(dblPrixCompoProposition) AS dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = @idProposition

UPDATE tproposition
SET dblPrixProposition = @MySum
WHERE idProposition = @idProposition


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:

J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
but sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à
une proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition
auquel la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que je
suis en train de mettre à jour.

Merci de votre aide.









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
Jean-Yves
Bonjour ,

J'ai exactement le même problème que Vincent , j'ai donc appliqué la méthode
donnée par Frédéric
mais j'ai le message d'erreur (à la création du trigger) suivant :

Serveur : Msg 157, Niveau 15, État 1, Procédure INSUPD_DetExpedition, Ligne
10
Il manque un agrégat dans la liste de définition d'une instruction UPDATE.

Voici le code extrait de mon trigger :

UPDATE TblExpedition
SET Quantité=SUM(QuantitéSurEtiquette)
FROM TblDetExpedition DET
INNER JOIN INSERTED INS
ON DET.Accuséréception=INS.Accuséreception AND
DET.Poste=INS.Poste
GROUP BY DET.Accuséréception,DET.Poste

Pourquoi celà ne fonctionne-t-il pas ?

Merci d'avance

Jean-Yves RANCUREL


"Fred BROUARD" a écrit dans le message de
news:
Oh philippe, c'est horrible ce que tu fais... Car ça va pas marvhé en cas


de
mise à jour de plusieurs tuples simultanés !

Voici quelque chose de plus "ensembliste"...

ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= SUM(dblPrixCompoProposition)
FROM dbo.tCompoProposition CP
INNER JOIN inserted i ON CP.idProposition = i.idProposition
GROUP BY CP.idProposition, i.idProposition
END

A +

Philippe T [MS] a écrit:
> Bonjour,
>
> Quelque chose comme cela ?
>
> DECLARE @idProposition int
> DECLARE @MySum money
>
> SELECT @idProposition = idProposition FROM inserted
>
> SELECT @MySum = SUM(dblPrixCompoProposition) AS


dblPrixPropositionDeCompo
> FROM dbo.tCompoProposition
> WHERE idProposition = @idProposition
>
> UPDATE tproposition
> SET dblPrixProposition = @MySum
> WHERE idProposition = @idProposition
>
>
> ----------------------------------------------------------------------
> Philippe TROTIN - Microsoft Service France
>
> "Vincent Dartois" wrote in message
> news:
>
>>J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
>>but sur un problème.
>>J'ai 2 tables ( tProposition et tCompoProposition)
>>
>>Ce que je souhaite faire :
>>------------------------
>>Lors de l'ajout/modification de la table tCompoProposition, c'est de
>>calculer la somme de l'ensemble des prix de la composition appartenant à
>>une proposition ( celle dont la composition appartient)
>>ce calcul est mis à jour dans la proposition de la table proposition
>>auquel la composition appartient.
>>
>>Voici ce que j'ai fais :
>>---------------------
>>ALTER TRIGGER tCompoProposition_Trigger1
>>ON dbo.tCompoProposition
>>FOR INSERT, UPDATE
>>AS
>>BEGIN
>> UPDATE tproposition
>> SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
>>dblPrixPropositionDeCompo
>> FROM dbo.tCompoProposition
>> WHERE idProposition = inserted idProposition)
>>WHERE idProposition=inserted idProposition
>>END
>>
>>mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
>>En bref je voudrais savoir comment récupérer la valeur d'un champs que


je
>>suis en train de mettre à jour.
>>
>>Merci de votre aide.
>>
>
>
>

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
Fred BROUARD
Oh philippe, c'est horrible ce que tu fais... Car ça va pas marvhé en cas de
mise à jour de plusieurs tuples simultanés !

Voici quelque chose de plus "ensembliste"...

ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= SUM(dblPrixCompoProposition)
FROM dbo.tCompoProposition CP
INNER JOIN inserted i ON CP.idProposition = i.idProposition
GROUP BY CP.idProposition, i.idProposition
END

A +

Philippe T [MS] a écrit:
Bonjour,

Quelque chose comme cela ?

DECLARE @idProposition int
DECLARE @MySum money

SELECT @idProposition = idProposition FROM inserted

SELECT @MySum = SUM(dblPrixCompoProposition) AS dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = @idProposition

UPDATE tproposition
SET dblPrixProposition = @MySum
WHERE idProposition = @idProposition


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Vincent Dartois" wrote in message
news:

J'ai besoin d'utilisé pour la première fois les triggers et voilà que je
but sur un problème.
J'ai 2 tables ( tProposition et tCompoProposition)

Ce que je souhaite faire :
------------------------
Lors de l'ajout/modification de la table tCompoProposition, c'est de
calculer la somme de l'ensemble des prix de la composition appartenant à
une proposition ( celle dont la composition appartient)
ce calcul est mis à jour dans la proposition de la table proposition
auquel la composition appartient.

Voici ce que j'ai fais :
---------------------
ALTER TRIGGER tCompoProposition_Trigger1
ON dbo.tCompoProposition
FOR INSERT, UPDATE
AS
BEGIN
UPDATE tproposition
SET dblPrixProposition= (SELECT SUM(dblPrixCompoProposition) AS
dblPrixPropositionDeCompo
FROM dbo.tCompoProposition
WHERE idProposition = inserted idProposition)
WHERE idProposition=inserted idProposition
END

mais j'ai une erreur sur le "inserted" que je mette le "." ou non.
En bref je voudrais savoir comment récupérer la valeur d'un champs que je
suis en train de mettre à jour.

Merci de votre aide.









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************