Bonjour
On me demande de faire un trigger qui met à jour un champ Remarque d'une table Chantier pour tout les chantier d'un même projet lorsque que l'on modifie le champ Remarque de la table Chantier
J'ai d'abord pensé à récupérer le champ Remarque dans mon trigger pas de bol c'est ntext, donc niet ensuite j'ai pensé à faire mon update et le select de remarque dans la même formule, même problème de ntext, j'ai vu qu'on pouvait tricher en passant par la table juste mis à jour pour récupérer le champ Remarque, plus de problème pour récupérer le champ mais impossible de savoir où placer la clause Where pour limiter l'Update au chantier du même Projet (message classique d'identificateur ne pouvant être lié sur CHANTIER.IDX_CHANTIER)
Une idée pour résoudre mon problème ?
Voila le code mon trigger
Je vous passe le détail de la table Chantier (bien trop long) disons qu'il y a l'id du chantier, la remarque et l'id du projet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE TRIGGER [dbo].[REMARQUE_CHANTIER_UDP] ON [dbo].[CHANTIER] AFTER UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for trigger here IF ((SELECT TRIGGER_NESTLEVEL()) > 1 ) RETURN IF UPDATE ([REMARQUE]) AND ((SELECT IDX_PROJET FROM [deleted]) IS NOT NULL) AND (SELECT IDX_PROJET FROM [deleted]) > 0 BEGIN UPDATE CHANTIER SET REMARQUE = CH1.REMARQUE FROM inserted JOIN CHANTIER AS CH1 ON inserted.IDX_CHANTIER = CH1.IDX_CHANTIER WHERE CHANTIER.IDX_CHANTIER = CH1.IDX_PROJET END END GO
EDIT: Soluce donnée par iberserk
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 UPDATE C1 SET C1.REMARQUE = C2.REMARQUE FROM CHANTIER C1 INNER JOIN (SELECT CH1.IDX_PROJET, CH1.Remarque FROM CHANTIER AS CH1 INNER JOIN inserted ON inserted.IDX_CHANTIER = CH1.IDX_CHANTIER) C2 ON C1.IDX_PROJET=C2.IDX_PROJET
Partager