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 :

Gérer toutes les lignes d'un update/insert dans un trigger


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Gérer toutes les lignes d'un update/insert dans un trigger
    Bonjour,

    J'ai pu trouver plusieurs post de ce type mais cela ne correspond pas exactement à mon soucis.
    Voici, lorsqu'on effectue un update ou insert de plusieurs lignes, j'aimerais que mon trigger effectue son code sur tous les enregistrement de la table inserted et pas seulement sur la dernière ligne.

    Je m'explique,

    Imaginons que j'ai la table

    History

    Trans_ID | Bit | Type | Zone | TKEY

    1 0 P NC 57
    2 0 P HD 89
    3 1 H PI 12
    4 0 P NC 14
    J'ai l'update suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update History
    set Bit = 1
    where Type = 'P'
    Nous aurons donc 1 seul evenement update avec 3 lignes dans la table inserted.

    Mon trigger lui vérifie la zone et si elle est par exemple NC il effectue un update dans une autre table.

    Ce qui donne ceci :

    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
    ALTER TRIGGER [dbo].[Trigg]  
       ON  [dbo].[History]
       AFTER INSERT,UPDATE
    AS 
     
    Declare 
    		@zone varchar(2),
    	             @TKEY varchar(2)
     
     
    BEGIN
     
                 SET NOCOUNT ON;
     
    	select @zone = i.zone, @TKEY= i.TKEY from inserted as i    
    	If @zone = 'NC'
    	BEGIN 
    			update Table2
    			set old = 1, old_Start = getdate()
    			where Table2.TKEY =  @TKEY						
    	END
     
    END
    Le soucis est qu'il ne met à jour que la dernière ligne de ma table inserted
    Je pensais passer par un cluster mais je sais que ce système est très lourd et utilisable en dernier recours je me tourne donc vers vous en espérant que quelqu'un aurait-il une idée ?

    Merci d'avance

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour

    je crois que c'est normal puisque tu stockes le résultat de ton select sur inserted dans une variable. Seule la dernière ligne est donc conservée dans les variables.

    Je verrais plutôt quelquechose qui s'applique à l'ensemble de la table inserted :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ALTER TRIGGER [dbo].[Trigg]
    ON [dbo].[History]
    AFTER INSERT,UPDATE
    AS
     
    SET NOCOUNT ON;
     
    update Table2
    set old = 1, 
    old_Start = getdate()
    from Table2 a, inserted b
    where a.TKEY = b.TKEY
    and b.zone='NC'
    à valider car non testé.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    ça marche super !

    Un grand merci Kagemaru

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2010, 10h14
  2. Fusionner toutes les lignes d'un fichier
    Par _Mac_ dans le forum Linux
    Réponses: 2
    Dernier message: 02/12/2005, 14h18
  3. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 11h26
  4. Réponses: 1
    Dernier message: 29/11/2005, 00h37
  5. Réponses: 4
    Dernier message: 11/10/2005, 15h03

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