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 FOR UPDATE sur SQL Server


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut Trigger FOR UPDATE sur SQL Server
    Bonjour à Tous,

    J'ai fais un trigger sur une table dans une BD SQL Server 2000 qui se déclenche au moment de la mise à jour de la table dont voici le code SQL complet :

    CREATE TRIGGER [TABLE_TRIGGER_UPD] ON dbo.TABLE
    FOR UPDATE
    AS
    update [dbo].[TABLE]
    set D_UPDATE = getdate(), U_UPDATE = USER

    Ce trigger met à jour automatiquement les champs D_UPDATE et D_USER au moment de la mise à jour. Cependant le trigger ne met pas à jour seulement l'enregistrement modifié mais tous les enregistrements de la table.

    Par exemple si l'utilisateur "AAA" change un enregistrement dans la table le 10/05/2009 10:33, tous les enregistrements de la tables sont mis à jour avec ces données à l'exécution du trigger.

    Est ce que quelqu'un pourrait m'aider ?
    Et merci d'avance.

  2. #2
    Expert confirmé
    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 : 46
    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
    Par défaut
    Bonjour,

    C'est normal il n'y a pas de restriction dans votre instruction UPDATE (pas de WHERE)

    ++

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    J'y ai pensé mais je ne sais pas comment utiliser WHERE ?

    est ce qu'il y a une variable (ou autre chose) qui peut déterminer l'enregistrement modifié ?

    Merci

  4. #4
    Expert confirmé
    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 : 46
    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
    Par défaut
    Il faut utiliser les tables temporaires stockées en mémoire prévues à cet effet. Celles-ci contiennent une copie des lignes affectées par votre mise à jour.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER [TABLE_TRIGGER_UPD] ON dbo.TABLE
    FOR UPDATE
    AS
    update [dbo].[TABLE]
     set D_UPDATE = getdate(), 
     U_UPDATE = USER
    WHERE id = INSERTED.id
    Vous mettez à jour cependant la même table qui déclenche votre trigger .. Est ce normal ?

    ++

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    j'ai essayé l'exemple mais il ne reconnait pas INSERTED en tant que table du coup j'ai un message d'erreur.

    En fait, comme j'ai expliqué au début, je veux qu'au moment de la mise à jour d'une ligne de TABLE, les champs D_UPDATE et D_USER de cette même table soient mis à jour.

  6. #6
    Expert confirmé
    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 : 46
    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
    Par défaut
    Euh excusez moi je vous ai donné une mauvaise syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER [TABLE_TRIGGER_UPD] ON dbo.TABLE
    FOR UPDATE
    AS
    UPDATE [dbo].[TABLE]
     SET D_UPDATE = getdate(), 
     U_UPDATE = USER
    FROM INSERTED 
    WHERE ([dbo].[TABLE].id = INSERTED.id)
    ++

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    ça marche !!

    Merci pour ton aide.

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

Discussions similaires

  1. MSSQL2008 - trigger faisant un update sur Linked server
    Par yozart dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2011, 09h00
  2. Trigger update avec sql server 2005
    Par tortuegenie dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/02/2009, 22h01
  3. Optimisation Update sur SQL SERVER 2000
    Par Hansen69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/12/2007, 22h17
  4. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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