Trigger Update : comment sélectionner l'enregistrement en cours

Le
Marcel Wüthrich
Bonjour,
J'ai un trigger FOR UPDATE sur une table (Table1). Ce trigger est le
suivant :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
INSERT INTO Table2
SELECT * FROM Table1

Comment faut-il faire pour insérer dans la Table2 uniqument l'enregistrement
qui est modifié dans la Table1 ?
Comment récupérer l'ID de l'enregistrement modifié (clé primaire) ?

Merci d'avance pour votre réponse.
Marcel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bruno reiter
Le #11852551
dasn un trigger tu as des "pseudo tables" accessibles dans le TRIGGER
contenant ce qui a été modifié :
pour INSERT, table inserted
pour DELETE, table deleted
pour UPDATE, table deleted (avant) et inserted (après)

br


"Marcel Wüthrich" news:
Bonjour,
J'ai un trigger FOR UPDATE sur une table (Table1). Ce trigger est le
suivant :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
INSERT INTO Table2
SELECT * FROM Table1

Comment faut-il faire pour insérer dans la Table2 uniqument
l'enregistrement qui est modifié dans la Table1 ?
Comment récupérer l'ID de l'enregistrement modifié (clé primaire) ?

Merci d'avance pour votre réponse.
Marcel



Marcel Wüthrich
Le #11852541
Un grand merci Bruno pour ta réponse.
Ca fonctionne parfaitement. Voilà le trigger :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
DECLARE @ID AS INT
SELECT @ID=ID from inserted
INSERT INTO Table2
SELECT * FROM Table1
WHERE ID = @ID

ID représente le nom de la colonne qui contient la clé primaire.
Marcel

"bruno reiter" news:
dasn un trigger tu as des "pseudo tables" accessibles dans le TRIGGER
contenant ce qui a été modifié :
pour INSERT, table inserted
pour DELETE, table deleted
pour UPDATE, table deleted (avant) et inserted (après)

br


"Marcel Wüthrich" news:
Bonjour,
J'ai un trigger FOR UPDATE sur une table (Table1). Ce trigger est le
suivant :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
INSERT INTO Table2
SELECT * FROM Table1

Comment faut-il faire pour insérer dans la Table2 uniqument
l'enregistrement qui est modifié dans la Table1 ?
Comment récupérer l'ID de l'enregistrement modifié (clé primaire) ?

Merci d'avance pour votre réponse.
Marcel






Fred BROUARD
Le #11852521
Marcel Wüthrich a écrit :
Un grand merci Bruno pour ta réponse.
Ca fonctionne parfaitement. Voilà le trigger :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
DECLARE @ID AS INT
SELECT @ID=ID from inserted
INSERT INTO Table2
SELECT * FROM Table1
WHERE ID = @ID



Sauf que ceci est faux car ne traite qu'une seule ligne. Or votre
trigger peut voir passer des milliers de lignes à la fois. En effet le
trigger SQL Server est par nature ensembliste. En conclusion il ne faut
jamais avoir de variable locale dans le code d'un trigger sauf à piloter
un curseur.

Voici donc une récriture correcte de votre trigger :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
INSERT INTO Table2
SELECT *
FROM Table1 T1
INNER JOIN inserted i
ON T1.ID = i.ID

A +


ID représente le nom de la colonne qui contient la clé primaire.
Marcel

"bruno reiter" news:
dasn un trigger tu as des "pseudo tables" accessibles dans le TRIGGER
contenant ce qui a été modifié :
pour INSERT, table inserted
pour DELETE, table deleted
pour UPDATE, table deleted (avant) et inserted (après)

br


"Marcel Wüthrich" news:
Bonjour,
J'ai un trigger FOR UPDATE sur une table (Table1). Ce trigger est le
suivant :

CREATE TRIGGER UpdateTable1 ON Table1
FOR UPDATE
AS
INSERT INTO Table2
SELECT * FROM Table1

Comment faut-il faire pour insérer dans la Table2 uniqument
l'enregistrement qui est modifié dans la Table1 ?
Comment récupérer l'ID de l'enregistrement modifié (clé primaire) ?

Merci d'avance pour votre réponse.
Marcel











--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Publicité
Poster une réponse
Anonyme