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 et Deleted


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Trigger et Deleted
    Bonjour à tous,

    Je suis confronté à un problème avec un trigger qui à pour but de "logger" toute suppresion de lignes d'une table A pour les insérer dans une table B (table d'archive).

    Le trigger que j'ai mis en place fonctionne SAUF dans les cas ou la suppression ne concerne pas une ligne mais un bloque de ligne avec un delete qui ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete TableA where TableA.Id in (select ....)
    J'ai lu sur ce forum que cela vient en effet du fait que dans le cas d'une suppression d'un bloque de ligne la table deleted contient plusieurs lignes et du coup une affectation du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set @Var1 = (select Champ1 from deleted)
    ne fonctionnera pas.

    J'ai donc essayé de joindre ma table A avec la table deleted et d'ajouter un group by mais rien n'y fait...

    Si vous avez des suggestions je suis preneur,
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    il manque :
    - le SGBD
    - le code de votre trigger

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Au temps pour moi.
    Il s'agit de Sql server 2008 R2.

    Et voici comment j'ai écrit 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
    CREATE TRIGGER Log_Delete_TABLEA
       ON  TABLEA
       AFTER DELETE
    AS 
    BEGIN
    	DECLARE @ID as varchar(20);
     
    	SET @ID = (select deleted.ID from deleted inner join TABLEA on (TABLEA.ID = deleted.ID) group by deleted.ID)
     
    	INSERT INTO HISTO
    		(ID)
    	VALUES
    		(@ID);
    END
    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Pourquoi passez vous par une variables + jointures ..?


    Ceci ne serai-t-il pas plus simple ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TRIGGER Log_Delete_TABLEA
       ON  TABLEA
       AFTER DELETE
    AS 
    BEGIN
    	INSERT INTO HISTO (ID)
    	SELECT ID FROM DELETED;
    END

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Je veux bien tester. Je viendrais annoncer le résultat du test.

    Par contre si ça marche dans le cas où plusieurs lignes sont dans deleted, je ne comprends pas pourquoi... La suite dans quelques minutes

    Merci

    Edit : ca marche... Je crois que j'ai cherché à me compliqué la vie.
    Merci bcp pour l'aide.

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

Discussions similaires

  1. Erreurs sur un trigger BEFORE DELETE
    Par Daikyo dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/06/2008, 02h13
  2. TRIGGER ON DELETE complexe ..
    Par XAMLdev dans le forum Développement
    Réponses: 6
    Dernier message: 07/01/2008, 12h10
  3. Trigger annulation delete
    Par lupizzz dans le forum Oracle
    Réponses: 7
    Dernier message: 02/01/2008, 14h14
  4. Trigger after delete
    Par festayre47 dans le forum PL/SQL
    Réponses: 8
    Dernier message: 27/12/2007, 12h02
  5. [SQL2005]Trigger On delete, insert, update(colonne)
    Par slim dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 27/02/2007, 16h36

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