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 :

Tracking modification de certains champs


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut Tracking modification de certains champs
    Bonjour,

    Je m'apprete a réaliser une appli dans laquelle certaines données peuvent etre modifiées par les utilisateurs via un formulaire, mais un historique de ces actions doit etre enregistré quelque part, afin de retrouver qui a fait quoi et quand..

    Se pose alors la question de la meilleure solution a adopter...
    - J'ai regardé du coté du journal de transaction, mais ca n'a pas l'air approprié..

    - J'ai alors pensé créer un TRIGGER sur un INSERT|UPDATE|DELETE, mais comme je n'ai pas besoins de tracker tous les champs de ma table, je me demande si c'est réellement la bonne solution..

    - Enfin, je me demande si il ne vaut pas mieux créer une table "LOGS" que j'irai peupler a la main par le biais d'une fonction dans mon code.

    Je précise que je développe une appli se composant d'un front-office en vb.net et d'un back-office en asp.net.

    Merci d'avance pour vos avis.
    Nono

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Une table des logs avec un (ou plusieurs) trigger(s) qui sont tout à fait apte à détecter la modification d'une colonne.


  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,

    La seule solution est un trigger (jusqu'à SQL Server 2008 et le Change Data Capture).

    Comme dit vmolines, il y a les fonctions UPDATE() et COLUMNS_UPDATED()... mais, elles ne donnent pas l'information si les colonnes sont réeellement mises à jour, c'est-à-dire si l'information est vraiment modifiée dans un UPDATE.

    Tu dois tester colonne par colonne, dans une jointure entre les pseudo tables DELETED et INSERTED.

    Regarde aussi les fonction CHECKSUM, BINARY_CHECKSUM et CHECKSUM_AGG, qui peuvent t'être utiles.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Merci pour les réponses rapides

    Citation Envoyé par vmolines Voir le message
    Il est possible de créer un TRIGGER qui se declenche sur l'update d'une colonne et non d'une table ?? J'avais cru comprendre que ce n'est pas possible...

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Non, le trigger se déclenche à chaque fois.

    UPDATE(macol) est une fonction qui renvoie vrai si la colonne a été mise à jour.
    Tu peux utiliser cette fonction dans le corps de tes triggers.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Merci pour les précisions, je vais donc finalement faire un trigger, et tester avec new et old pour voir si la valeur a bien été updatée, et dans ce cas seulement, ajouter une ligne dans ma table de log.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2008, 16h42
  2. Permettre la modification de CERTAINS champs dans un formulaire
    Par AUDREYBARCA dans le forum Sécurité
    Réponses: 10
    Dernier message: 03/08/2007, 22h52
  3. empêcher la modification d'un champ
    Par shurized dans le forum Oracle
    Réponses: 29
    Dernier message: 30/08/2004, 18h25
  4. supprimer et archiver données de certains champs
    Par tomm dans le forum Bases de données
    Réponses: 11
    Dernier message: 10/03/2004, 08h13
  5. DBNavigator, requete SQL et modif d'un champ
    Par TieumB dans le forum C++Builder
    Réponses: 9
    Dernier message: 27/01/2004, 08h50

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