|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
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 > |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
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) ? >> >> Merci d'avance pour votre réponse. >> Marcel >> > |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
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 *********************** |
|
![]() |
| Outils de la discussion | |
|
|