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 :

[SQL SERVER 2000][Trigger] Pb lors de l'execution du trigger


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Par défaut [SQL SERVER 2000][Trigger] Pb lors de l'execution du trigger
    Bonjour à tous,

    Lors de l'ajout, suppression ou mise à jour de la table ob_dimPRODUCTS, je souhaite supprimer un certain nombre de ligne de cette même table et en ajouter d'autres. Ci-dessous le code du 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    CREATE TRIGGER testtrigger  ON [dbo].[ob_dimPRODUCTS] 
    AFTER DELETE,INSERT,UPDATE
    AS
    BEGIN
    	/*supprime les lignes ayant pour parent TYP2 ou TYP3 
    	c'est à dire les lignes donnant le nom des GroupeCustomer ou des Constructeurs*/
    	DELETE FROM [dbo].[ob_dimPRODUCTS] 
    	WHERE p_PRODUCT= 'TYPE2' or p_PRODUCT= 'TYPE3' 
     
    	/*supprime les lignes ayant un code qui commene par TYP2 ou TYP3
    	c'est à dire les produits classés par GroupeCustomer ou par Constructeur*/
    	DELETE FROM [dbo].[ob_dimPRODUCTS] 
    	WHERE k_PRODUCT like 'TYP2%' or k_PRODUCT like 'TYP3%' 
     
    	/*insert les GroupeCustomer*/
    	INSERT INTO [dbo].[ob_dimPRODUCTS]   (k_PRODUCT, n_PRODUCT, p_PRODUCT) 
    	SELECT DISTINCT p1_GroupeCustomer, p1_GroupeCustomer, 'TYPE2' 
    	FROM ob_dimPRODUCTS
    	WHERE (p1_GroupeCustomer <> '')
     
    	/*insert les Constructeurs*/
    	INSERT INTO [dbo].[ob_dimPRODUCTS]   (k_PRODUCT, n_PRODUCT, p_PRODUCT) 
    	SELECT DISTINCT p1_Constructeur, p1_Constructeur, 'TYPE3' 
    	FROM ob_dimPRODUCTS
    	WHERE (p1_Constructeur <> '')
     
    	/*insert les produits enfants des GroupeCustomer*/
    	INSERT INTO [dbo].[ob_dimPRODUCTS]   (k_PRODUCT, n_PRODUCT, p_PRODUCT, c_PRODUCT) 
    	SELECT 'TYP2'+k_PRODUCT, k_PRODUCT, p1_GroupeCustomer, '[PRODUCTS].&['+k_PRODUCT+']'
    	FROM ob_dimPRODUCTS
    	WHERE  p1_GroupeCustomer<>''
     
    	/*insert les produits enfants des Constructeurs*/
    	INSERT INTO [dbo].[ob_dimPRODUCTS]   (k_PRODUCT, n_PRODUCT, p_PRODUCT, c_PRODUCT) 
    	SELECT 'TYP2'+k_PRODUCT, k_PRODUCT, p1_Constructeur, '[PRODUCTS].&['+k_PRODUCT+']'
    	FROM ob_dimPRODUCTS
    	WHERE  p1_Constructeur<>''
     
    END
    Lorsque j'ajoute, je supprime ou je modifie une ligne de ma table, seule la première instruction (le premier delete) est lancé, les autres non !
    Avez-vous une idée de l'erreur que je fais ???

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    Ca semble assez logique oui :

    Tu fais un truc (insert,delete,update) sur ta table,
    => Aussitôt le trigger se déclenche et détruit une ou plusieurs lignes sur cette MEME table.
    => Aussitôt, et AVANT de continuer, le trigger se déclenche et supprime une ou plusieurs lignes, etc...

  3. #3
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Pas forcément. Ca s'appelle de la récursion directe, et par défaut, elle est désactivée.
    Tu peux voir si c'est le cas avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATABASEPROPERTYEX(DB_NAME(), 'IsRecursiveTriggersEnabled')

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Par défaut
    J'ai 0 comme réponse !

  5. #5
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER DATABASE mabase SET RECURSIVE_TRIGGERS OFF

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/02/2009, 18h54
  2. Réponses: 0
    Dernier message: 20/07/2007, 15h35
  3. Réponses: 2
    Dernier message: 30/01/2007, 11h08
  4. [SQL Server 2000] error lors d'un select
    Par ardi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2006, 08h39
  5. [SQL Server 2000] erreur lors importation fichier excel
    Par Abydos Business Group dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/03/2006, 09h24

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