OVH Cloud OVH Cloud

Trigger lors de modif de donnée créée par trigger

2 réponses
Avatar
Pierre Fauconnier
Bonjour

J'ai une table Clients avec un champ Creation de type Datetime

A la création d'une nouvelle fiche, j'ai un trigger qui stocke dans creation
la valeur de getdate()
---
ALTER TRIGGER t_Clients_Insert_Creation

ON dbo.t_Clients

FOR INSERT

AS

UPDATE t_clients set t_clients.creation = getdate() from t_clients join
inserted on (t_clients.client = inserted.client)

---

Jusque là, tout va bien. Je voudrais interdire la modification de cette date
de création.
J'ai donc créé un trigger pour interdire de modifier la date de création
---
ALTER TRIGGER t_Clients_Modif_Creation

ON dbo.t_Clients

FOR UPDATE

AS

if update(creation)

begin

raiserror('Modif de date interdite',0,1)

rollback transaction

end

---

Il semble y avoir concurrence entre les triggers car lorsque les deux
triggers sont posés, je ne sais plus insérer un nouveau client dans ma
table...

Je suppose que ce problème est d'une banalité affligeante, mais je ne trouve
pas de solution et les exemples que j'ai pu parcourir ne semblent pas
correspondre à mon cas.

Merci pour vos solutions.


--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

2 réponses

Avatar
Sylvain Lafontaine
Sans vraiment me pencher sur la question, l'idéal serait peut-être de créer
un seul et même trigger pour l'insertion et l'édition et régler la question
de ce qui doit être fait dans ce seul et unique trigger.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Pierre Fauconnier" wrote in message
news:
Bonjour

J'ai une table Clients avec un champ Creation de type Datetime

A la création d'une nouvelle fiche, j'ai un trigger qui stocke dans
creation la valeur de getdate()
---
ALTER TRIGGER t_Clients_Insert_Creation

ON dbo.t_Clients

FOR INSERT

AS

UPDATE t_clients set t_clients.creation = getdate() from t_clients join
inserted on (t_clients.client = inserted.client)

---

Jusque là, tout va bien. Je voudrais interdire la modification de cette
date de création.
J'ai donc créé un trigger pour interdire de modifier la date de création
---
ALTER TRIGGER t_Clients_Modif_Creation

ON dbo.t_Clients

FOR UPDATE

AS

if update(creation)

begin

raiserror('Modif de date interdite',0,1)

rollback transaction

end

---

Il semble y avoir concurrence entre les triggers car lorsque les deux
triggers sont posés, je ne sais plus insérer un nouveau client dans ma
table...

Je suppose que ce problème est d'une banalité affligeante, mais je ne
trouve pas de solution et les exemples que j'ai pu parcourir ne semblent
pas correspondre à mon cas.

Merci pour vos solutions.


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci





Avatar
Pierre Fauconnier
Bonjour Sylvain

Je m'en suis sorti en suivant ton conseil
---
ALTER TRIGGER t_Clients_Majuscules_Client
ON dbo.t_Clients
for INSERT, update
AS
update t_clients set client = upper(inserted.client) from t_clients join
inserted on (t_clients.client = inserted.client)
update t_clients set creation = getdate() from t_clients join inserted on
(t_clients.client = inserted.client) where (inserted.creation is null)
update t_clients set creation = deleted.creation from t_clients join deleted
on (t_clients.client = deleted.client) where (deleted.creation is not null)
---

Tout semble fonctionner...

Merci beaucoup et bonne semaine


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

-----
"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> a
écrit dans le message de news: O%
Sans vraiment me pencher sur la question, l'idéal serait peut-être de
créer un seul et même trigger pour l'insertion et l'édition et régler la
question de ce qui doit être fait dans ce seul et unique trigger.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Pierre Fauconnier" wrote in message
news:
Bonjour

J'ai une table Clients avec un champ Creation de type Datetime

A la création d'une nouvelle fiche, j'ai un trigger qui stocke dans
creation la valeur de getdate()
---
ALTER TRIGGER t_Clients_Insert_Creation

ON dbo.t_Clients

FOR INSERT

AS

UPDATE t_clients set t_clients.creation = getdate() from t_clients join
inserted on (t_clients.client = inserted.client)

---

Jusque là, tout va bien. Je voudrais interdire la modification de cette
date de création.
J'ai donc créé un trigger pour interdire de modifier la date de création
---
ALTER TRIGGER t_Clients_Modif_Creation

ON dbo.t_Clients

FOR UPDATE

AS

if update(creation)

begin

raiserror('Modif de date interdite',0,1)

rollback transaction

end

---

Il semble y avoir concurrence entre les triggers car lorsque les deux
triggers sont posés, je ne sais plus insérer un nouveau client dans ma
table...

Je suppose que ce problème est d'une banalité affligeante, mais je ne
trouve pas de solution et les exemples que j'ai pu parcourir ne semblent
pas correspondre à mon cas.

Merci pour vos solutions.


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci