Trigger UPDATED sur plusieurs champs

cs_Maroxye Messages postés 177 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 16 octobre 2012 - 2 avril 2007 à 15:53
asmaa17 Messages postés 89 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 14 mai 2009 - 26 oct. 2007 à 00:42
Bonjour!


Je débute en SQL et je fois faire un TRIGGER sur l'ajout, la suppression et la modification de certains champs dans une table. Lorsque ces 3 opérations surviennent, j'ajoute l'information dans une nouvelle table(M=modification, A=Ajout, S=suppression + usager ayant fait la modif +date et heure). Pour l'ajout et la suppression, pas de problèmes. C'est pour la modif qu'il y en a un.


Voici mon code :


***************************************************
CREATE TRIGGER item_updated
ON item
FOR UPDATE
AS
DECLARE
@AncienneValeur VARCHAR(100),
@NouvelleValeur VARCHAR(100),
@NomChamp VARCHAR(100)


IF UPDATE(description)
  BEGIN
  SELECT @AncienneValeur = (SELECT description FROM Deleted)
  SELECT @NouvelleValeur = (SELECT description FROM Inserted)
  SELECT @NomChamp = "Description"
  END


  IF UPDATE(revision)
    BEGIN
    SELECT @AncienneValeur = (SELECT revision FROM Deleted)
    SELECT @NouvelleValeur = (SELECT revision FROM Inserted)
    SELECT @NomChamp = "Revision"
    END


INSERT INTO item_trigger ( Date_modif,Type_modif,Nom_table, Nom_champ, Ancienne_info, Nouvelle_info, Nom_usager)
SELECT CURRENT_TIMESTAMP, "M", "item", @NomChamp, @AncienneValeur, @NouvelleValeur, UpdatedBy from inserted item


***************************************************


Le problème est que si quelqu'un modifie 2 champs en même temps, seulement une ligne s'ajoute à ma table(il ne tient pas compte de toutes les opérations en même temps). J'imagine qu'il me faudrait une table temporaire ou un curseur???Et si oui, où le placer?


Merci à l'avance de votre aide, je suis vraiment bloqué!




Isabelle

1 réponse

asmaa17 Messages postés 89 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 14 mai 2009
26 oct. 2007 à 00:42
salut isabelle,
essaye ce code:
--inserer la clause insert into à l'interieur de chaque  if update
CREATE TRIGGER item_updated
ON item
FOR UPDATE
AS
DECLARE
@AncienneValeur VARCHAR(100),
@NouvelleValeur VARCHAR(100),
@NomChamp VARCHAR(100)
IF UPDATE(description)
  BEGIN
  SELECT @AncienneValeur = (SELECT description FROM Deleted)
  SELECT @NouvelleValeur = (SELECT description FROM Inserted)
  SELECT @NomChamp = "Description"
---insertion d'information
INSERT INTO item_trigger ( Date_modif,Type_modif,Nom_table, Nom_champ, Ancienne_info, Nouvelle_info, Nom_usager)
SELECT CURRENT_TIMESTAMP, "M", "item", @NomChamp, @AncienneValeur, @NouvelleValeur, user_name(1)
 from inserted ---updateby( ne fonction pas sous sql server 2000)
  END

  IF UPDATE(revision)
    BEGIN
    SELECT @AncienneValeur = (SELECT revision FROM Deleted)
    SELECT @NouvelleValeur = (SELECT revision FROM Inserted)
    SELECT @NomChamp = "Revision"
---insertion d'information
INSERT INTO item_trigger ( Date_modif,Type_modif,Nom_table, Nom_champ, Ancienne_info, Nouvelle_info, Nom_usager)
SELECT CURRENT_TIMESTAMP, "M", "item", @NomChamp, @AncienneValeur, @NouvelleValeur, user_name(1)
from inserted 
    END

la vie ne donne pas des cadeaux
0
Rejoignez-nous