IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[SQL2K]PB de trigger


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut [SQL2K]PB de trigger
    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!!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    tu ne peux pas faire simplement un champs calcule, ca existe sur sql serveur... ce serait plus simple qu'un trigger!

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à ylarvor
    Ben pourquoi pas, je savais pas que c'étais possible, mais comment on peut faire??
    merci d'avance!!

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    il s'agit de la definir à la creation de la table à l'aide de AS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE T 
    (COL1 INT,
     COL2 INT,
     COLCALC AS COL1 + COL2,
     COLCALC_PERSISTANTE AS COL1 - COL2 PERSISTED,
     COLCALC_PERSISTANTE_INDEXEE  AS COL1 * COL2);
    GO

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Oui, mais il veut une moyenne or les colonnes calculée le sont ligne à ligne. Mais je voit un AVG sans group BY dans la requête UPDATE.

    Bref pas clair du tout.

    Pouvez vous poster un exemple ????

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Ce que je veux c'est obtenir la durée moyenne de chaque intervention mais la colonne IN_RECUPMAT peut être NULL.

    EXEMPLE :
    IN_PRICHARG = 10/02/2008
    IN_RECUPMAT = 12/02/2008
    ALORS IN_DUREMOY = 2 jours vu que 12-10 = 2 et que 2/1 = 2

    J'espère avoir été plus claire.

    merci d'avance!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL2K] Trigger "INSTEAD OF" et vue
    Par Faboul dans le forum Développement
    Réponses: 5
    Dernier message: 18/06/2008, 16h04
  2. [SQL2K] TRIGGER - Instead of Insert
    Par buchette dans le forum Développement
    Réponses: 3
    Dernier message: 04/06/2008, 17h33
  3. [SQL2K] Insert en cascade, trigger
    Par Faboul dans le forum Développement
    Réponses: 6
    Dernier message: 08/08/2007, 10h48
  4. [SQL2K] Activation et Désactivation de trigger
    Par maitrebn dans le forum Développement
    Réponses: 7
    Dernier message: 04/05/2007, 17h11
  5. [ SQL2k ]Detecter la ature de l'action d'un trigger
    Par Last newbie dans le forum Développement
    Réponses: 1
    Dernier message: 21/06/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo