Bonjour,

Voila je souhaiterais réaliser un trigger qui me permet de remplir un champ calculé.

Je m'explique :
* Tout d'abord voici le DLL de la table concernée!!
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
19
20
21
22
CREATE TABLE [dbo].[INTERVENTION] (
	[IN_NUMINTER] [varchar] (15) COLLATE French_CI_AS NOT NULL ,
	[IN_NUMCLT] [varchar] (13) COLLATE French_CI_AS NOT NULL ,
	[IN_M_NUMCLT] [varchar] (13) COLLATE French_CI_AS NOT NULL ,
	[IN_IDMAT] [numeric](13, 0) NOT NULL ,
	[IN_RESINTER] [varchar] (250) COLLATE French_CI_AS NOT NULL ,
	[IN_ETAINTER] [varchar] (15) COLLATE French_CI_AS NULL ,
	[IN_LIEINTER] [nchar] (16) COLLATE French_CI_AS NOT NULL ,
	[IN_DEPOMAT] [char] (50) COLLATE French_CI_AS NULL ,
	[IN_RECEPMAT] [char] (20) COLLATE French_CI_AS NULL ,
	[IN_PRICHARG] [datetime] NULL ,
	[IN_DISPOMAT] [datetime] NULL ,
	[IN_RECUPMAT] [datetime] NULL ,
	[IN_DUREEREP] [decimal](18, 0) NULL ,
	[IN_DUREMOY] [decimal](18, 0) NULL ,
	[IN_HPASSE] [decimal](18, 0) NULL ,
	[IN_HFACTUR] [decimal](18, 0) NULL 
) ON [PRIMARY]
GO
Insert into INTERVENTION (IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_ETAINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG, IN_DISPOMAT, IN_RECUPMAT, IN_HPASSE, IN_HFACTUR) Values ('2008/02/01-001', 'hf', 'hf', '1', 'tjhnj', 'en attente', 'Boutique', 'dr', 'bidul', '01/02/2008', '29/02/2008', '10/03/2008', '15', '12')
Insert into INTERVENTION (IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_ETAINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG, IN_DISPOMAT, IN_RECUPMAT, IN_HPASSE, IN_HFACTUR) Values ('2008/03/15-002', 'jh', 'jh', '2', 'th', 'demande', 'Site / Boutique', 'fz', 'truc muche', '15/03/2008', '17/03/2008', '19/03/2008', '25', '24')
Insert into INTERVENTION (IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_ETAINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG, IN_DISPOMAT, IN_RECUPMAT, IN_HPASSE, IN_HFACTUR) Values ('2008/03/16-001', 'jh', 'jh', '2', 'fhy', 'demande', 'Site', 'dr', 'bidul', '16/03/2008',	'16/03/2008', '16/03/2008', '15', '16')
Je souhaiterais que le champ "IN_DUREMOY" se remplisse lorsque le champ "IN_RECUPMAT" est différent de null.
"IN_DUREMOY" représente la durée moyenne d'une intervention donc la moyenne entre "IN_RECUPMAT" et "IN_PRICHARG".
"IN_RECUPMAT" correspond à la date de récupération du matériel et "IN_PRICHARG" représente la date de la prise en charge du matériel.

Je sait que pour calculer la moyenne entre ces dates c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AVG(CAST(IN_RECUPMAT AS FLOAT) - CAST(IN_PRICHARG AS FLOAT))
J'ai essayé la chose suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
CREATE TRIGGER E_INT_INS
ON dbo.INTERVENTION  AFTER INSERT
AS
UPDATE INTERVENTION SET IN_DUREMOY=
                           CASE 
                               WHEN IN_RECUPMAT IS NULL then IN_DUREMOY IS NULL
                               ELSE IN_RECUPMAT = AVG(CAST(IN_RECUPMAT AS FLOAT) - CAST(IN_PRICHARG AS FLOAT))
                           END
  FROM
INTERVENTION
Mais cela ne fonctionne pas cr il me dit que le 'IS' de la ligne suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
then IN_DUREMOY IS NULL
est une syntaxe incorrecte (erreur 156).

Comment faire?? Je me demande si je peux vraiment.

Merci d'avance!!