cs_Maroxye
Messages postés177Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention16 octobre 2012
-
2 avril 2007 à 15:53
asmaa17
Messages postés89Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention14 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é!
asmaa17
Messages postés89Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention14 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