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 :

Trigger Mise à jour d'un champ


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club Avatar de benjamin122
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2012
    Messages : 25
    Points : 35
    Points
    35
    Par défaut Trigger Mise à jour d'un champ
    Bonjour,

    Je débute en SQL SERVER et je suis confronté à un problème.
    Je dois mettre à jour un champs qui se nomme ETDCONF dans ma table F_DOCLIGNE en fonction de la modification d'un autre champs date DO_Date
    C'est simple , après l'ajout ou la modification de ETD1, je souhaite stocker dans ETDCONF une date calculé qui sera la somme de DO_Date et une durée qui se trouve dans une autre table d'une autre base(voir ci dessous)

    J'ai une table dans une autre base de donnée ( leadtime) avec les informations de temps de production. Seul 2 résultats de cette table m'intérressent pour ce trigger.

    Nom : leadtime.png
Affichages : 765
Taille : 2,2 Ko

    Voici mon trigger :

    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
    23
    24
    25
    26
    27
    28
    29
    USE [XXX]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TRIGGER [dbo].[updateETD]
        ON [XXX].[dbo].[F_DOCLIGNE]
        FOR INSERT, UPDATE
        AS
     
        BEGIN
    		DECLARE @dureeTW int 
    		DECLARE @dureeCK int
    		DECLARE @maref varchar(50)
     
    		SELECT @maref = DO_ref from [xxx].[dbo].[f_docligne]
    		SELECT @dureeCK = duree from [LOGISTIQUE].[dbo].[leadtime] where libelle LIKE 'PRODCK'
    		SELECT @dureeTW = duree from [LOGISTIQUE].[dbo].[leadtime] where libelle LIKE 'PRODTW'
     
     
    		if(@maref LIKE '%CK%')
    		update [xxx].[dbo].[f_docligne] set ETDCONF = DATEADD (day,@dureeCK,DO_Date);
    		else
    		update [xxx].[dbo].[f_docligne] set ETDCONF = DATEADD (day,@dureeTW,DO_Date);
     
     
        SET NOCOUNT ON
        END
    à la modification d'une ligne de ma table docligne, mon trigger à l'air de planter et tourner en boucle. Il s'agit très certainement d'un problème de conception/logique du trigger mais après recherche , je n'arrive pas à trouver la solution.
    Si quelqu'un peut me mettre sur la piste ou me donner un conseil , je suis preneur et serais extrêmement ravi.

    Merci beaucoup

    Benjamin122

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Non, il ne tourne pas en boucle, puisqu... il n'y a pas de boucle...

    En revanche, il semble qu''il mette à jour la totalité de la table, puisque vous n'avez pas mis de clause WHERE à vos requete UPDATE en fin de déclencheur.


    Il faut penser que la commande qui déclenchera le trigger peut mettre à jour plusieurs lignes.

    Il faut donc vous appuyer sur les pseudos tables INSERTED et DELETED dans votre trigger.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2014, 12h46
  2. Réponses: 4
    Dernier message: 02/01/2014, 13h39
  3. Trigger de mise à jour automatique du champ inséré
    Par popovitch130 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/08/2008, 09h05
  4. Réponses: 4
    Dernier message: 25/01/2006, 15h42
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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