2010-08-30 5 views
1

J'ai des tables dans Sql Server. Je veux enregistrer une ligne, si la ligne est mise à jour ou supprimée. comment puis-je organiser ce processus?Comment organiser la journalisation des lignes mise à jour

structure de la table d'échantillon:

[uniqueGUID] [uniqueidentifier] NOT NULL, 
    *[kod_a] [nchar](5) NOT NULL, 
    *[kod_b] [nchar](5) NOT NULL, 
    *[kod_c] [nchar](2) NOT NULL, 
    *[kod_d] [nchar](4) NOT NULL, 
    [name] [nvarchar](25) NULL, 
    [sname] [nvarchar](25) NULL, 
    [address] [nvarchar](25) NULL, 
    [payment] money NULL 

Note: colonnes marquées (kod_a, kod_b, kod_c, kod_d) sont uniques constaint ensemble. Un autre tableau a également la même structure, le nombre de colonnes peut être différent.

une idée, s'il vous plaît.

merci.

+0

Voulez-vous dire que vous avez besoin d'une piste d'audit chaque fois qu'une ligne est supprimée ou mise à jour? De quoi avez-vous besoin pour vous connecter? Juste les données? L'utilisateur? Rien d'autre? – Oded

+0

Je souhaite me connecter à une autre table dont la forme initiale a été modifiée, et par qui elle a été modifiée, datetime et quelques informations d'ajout. – loviji

Répondre

0

Les anciennes données peuvent être exposées dans un trigger en utilisant le Deleted table. Je vais vous donner un exemple rapide pour vous aider à démarrer.

create trigger YourTriggerName on YourTable 
after update, delete 
as 
    /* Deleted table contains the "old" values before the update/delete operation */ 
    insert into YourLoggingTable 
     (UniqueGUID, kod_a, ..., payment, DateModified) 
     select UniqueGUID, kod_a, ..., payment, getdate() 
      from Deleted 
go 
0

Si toutes les mises à jour passent par une seule procédure stockée, vous pouvez créer et exécuter une procédure stockée d'audit lorsque vous mettez à jour ou supprimer des données dans ce tableau. Les déclencheurs sont excellents, mais ils peuvent parfois causer de la douleur. Si possible, évitez de les utiliser.

+0

Selon mon expérience, cette technique est trop restrictive et susceptible d'être involontairement contournée. Vous ne capturerez jamais une modification effectuée en dehors de la procédure stockée à l'aide de cette technique (par exemple, un administrateur de base de données effectue un correctif de données rapide avec une instruction de mise à jour dans SSMS). C'est pourquoi je préférerais un déclencheur ici. Peu importe comment/où les données sont modifiées, le changement sera capturé. –

+0

Je suis d'accord avec Joe, l'OMI dans ce cas en utilisant des déclencheurs est une stratégie plus sûre –

Questions connexes