Trigger Update : comment sélectionner l'enregistrement en cours
3 réponses
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) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
bruno reiter
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" wrote in message 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
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" <marcel.wuthrich@cip-tramelan.ch> wrote in message
news:eBowCEo3HHA.1212@TK2MSFTNGP05.phx.gbl...
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) ?
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" wrote in message 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
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" a écrit dans le message de 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" wrote in message 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
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" <delete-this.br33@terra.com.br> a écrit dans le message de
news: OAyCrQo3HHA.1208@TK2MSFTNGP05.phx.gbl...
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" <marcel.wuthrich@cip-tramelan.ch> wrote in message
news:eBowCEo3HHA.1212@TK2MSFTNGP05.phx.gbl...
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) ?
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" a écrit dans le message de 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" wrote in message 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
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" a écrit dans le message de 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" wrote in message 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 ***********************
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" <delete-this.br33@terra.com.br> a écrit dans le message de
news: OAyCrQo3HHA.1208@TK2MSFTNGP05.phx.gbl...
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" <marcel.wuthrich@cip-tramelan.ch> wrote in message
news:eBowCEo3HHA.1212@TK2MSFTNGP05.phx.gbl...
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 ***********************
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" a écrit dans le message de 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" wrote in message 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 ***********************