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

MS SQL Server Discussion :

[Trigger After Insert ne se declenche pas]


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut [Trigger After Insert ne se declenche pas]
    Bonjour,
    voilà, deux jours passé dessus, j'ai rien trouvé.

    J'ai deux tables A et B. B possède un trigger AFTER INSERT dont le script suivant fait parti:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO A 
    	(R_KEY, LOCALE, DESCRIPTION) VALUES 
    	( @pricingRKey ,  'en_US' ,   @rDescription )
    . Donc le trigger lance aussi une insertion dans la table A.

    La table A possède aussi un trigger AFTER INSERT qui duplique les données suivant les locales. Les données dupliquées devraient se trouver dans A même.

    Sauf que voilà, quand je fais une insertion a partir de B, je vois bien le nouveau enregistrement dans B et dans A aussi mais pas avec les données dupliquées, donc pour moi le trigger de A ne s’était pas déclenché .
    Or si je lance le script d'insertion ci-dessus directement a partir de la table A, j'ai bien les données dupliquées i.e trigger declenché.

    Quelqu'un peut il me mettre dans la bonne voie? Merci

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Pourrais t'on avoir le code complet du trigger et les DDL des tables A et B ?

    ++

  3. #3
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Trigger de la table B
    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
    USE [mabase]
    GO
    /****** Object:  Trigger [db_owner].[sa_trigger_B]    Script Date: 02:40:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER TRIGGER [db_owner].[sa_trigger_A]
       ON  [db_owner].[table_B]
       AFTER INSERT
    AS
    INSERT INTO table_A
    	(RULE_KEY, LOCALE, DESCRIPTION) VALUES 
    	( 665577 ,  'en_US' ,   'test_description57' ) 
    END
    Trigger de la Table A
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    USE [mabase]
    GO
    /****** Object:  Trigger [dbo].[prcart_rule_loc_trigger]    Script Date: 03/11/2011 05:59:43 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[trigger_A]
        on [dbo].[table_A]
        for insert
        as
          DECLARE @var_locale NVarChar(10)
          DECLARE @v_flag numeric
          DECLARE @i_locale NVarChar(10)
          DECLARE c_locales CURSOR FOR SELECT LOCALE_NAME FROM table_C
           set @i_locale = (select locale from Inserted)
          IF @v_flag IS NULL
              BEGIN
         update a set flag = 1 from  table_A a join Inserted i on a.rule_key = i.rule_key
     
               OPEN c_locales
     
                   FETCH NEXT FROM c_locales INTO @var_locale
     
                    WHILE @@FETCH_STATUS = 0
                      BEGIN
                        IF @var_locale <> @i_locale
    		     BEGIN
                         insert into A select r_key, @var_locale, DESCRIPTION from Inserted
                     END
                      FETCH NEXT FROM c_locales INTO @var_locale
                     END
     
               CLOSE c_locales
               DEALLOCATE c_locales
     
          set @v_flag = 1
       END
    Je rappel que le trigger_A se déclenche lorsqu'on fait une insertion directement a partir de la table_A. Mais il ne se déclenche pas quand on fait une insertion dans le trigger_B .
    Merci

  4. #4
    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,

    Peut-on également avoir le résultat de ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sp_configure 'nested triggers'

    merci

  5. #5
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    name: nested triggers
    minimum: 0
    maximum: 1
    config_value: 0
    run_value: 0

  6. #6
    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
    Voila la raison de votre problème !

    Par défaut, SQL Server autorise le déclenchement des triggers en cascades, mais votre configuration non !

    Votre trigger sur la table B ne peut donc pas déclencher le trigger sur la table A...

    ceci devrait résoudre le problème :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sp_configure 'nested triggers', 1
    RECONFIGURE

    Par contre, vous devriez peut être d'abord chercher à savoir pourquoi cette configuration a été faite ainsi, pour savoir à quels effets de bords vous vous exposez !

  7. #7
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Merci pour votre reponses les guys

    La reponse de aieeeuuuuu (drole de pseudo ) a réglé le problème

    vous avez bien vu aussi pour l'effet de bord, je m'y penche la dessus .

  8. #8
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    La reponse de aieeeuuuuu (drole de pseudo )

    Oui qu'est ce que çà cache? tendances louches ou enfance douloureuse?

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

Discussions similaires

  1. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/12/2006, 13h37
  2. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/12/2006, 14h23
  3. Un Trigger After INSERT peut-il empêcher l'INSERT ?
    Par cian2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 13/09/2006, 17h27
  4. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18

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