2011-06-02 5 views
8

J'ai une table Product et une autre table ProductLog.SQL Server déclencheur sur insérer, supprimer et mettre à jour sur la table

La table de journal doit suivre deux colonnes dans la table Product. Chaque fois qu'il y a une insertion, une mise à jour ou une suppression sur ces colonnes, j'ai besoin de mettre à jour la table de journal.

Dois-je écrire trois déclencheurs distincts, ou un déclencheur peut-il gérer ces opérations?

J'ai aussi besoin de connaître le type d'opération, par exemple je devrai savoir si l'entrée dans la table de journal était due à l'insertion ou à la suppression ou à la mise à jour. Si quelqu'un me donne un exemple, ce serait génial.

Répondre

24

Vous avez juste besoin d'un déclencheur

CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE 

Vous pouvez déterminer DML déclenche le déclencheur en fonction du nombre d'enregistrements dans inserted et deleted tables disponibles dans le corps de déclenchement. Pour INSERT, deleted est vide, car DELETE, inserted est vide, pour UPDATE les deux inserted et deleted ne sont pas vides. Par exemple,

IF @@ROWCOUNT = 0 -- exit trigger when zero records affected 
BEGIN 
    RETURN; 
END; 
DECLARE @type CHAR(1);-- 'U' for update, 'D' for delete, 'I' for insert 
IF EXISTS(SELECT * FROM inserted) 
BEGIN 
    IF EXISTS(SELECT * FROM deleted) 
    BEGIN 
    SET @type ='U'; 
    END 
    ELSE 
    BEGIN 
    SET @type ='I'; 
    END 
END 
ELSE 
BEGIN 
    SET @type = 'D'; 
END; 

En outre, un coup d'oeil sur Tracking Data Changes, il y a une autre option pour le suivi des changements sans déclencheurs.

6

ou tout simplement

DECLARE @type CHAR(1)= 
    case when not exists(SELECT * FROM inserted) 
     then 'D' 
    when exists(SELECT * FROM deleted) 
     then 'U' 
    else 
     'I' 
    end 
+0

J'ai même question quelqu'un peut me aider. Voir le lien suivant http://stackoverflow.com/questions/26043106/how-to-determine-if-insert-or-update/26043654#26043654 – Prathyush

Questions connexes