PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Hébergement serveur > ms.public.fr.sqlserver > Trigger Update : comment sélectionner l'enregistrement en cours
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Trigger Update : comment sélectionner l'enregistrement en cours

Réponse
 
LinkBack Outils de la discussion
Vieux 14/08/2007, 15h40   #1 (permalink)
Marcel Wüthrich
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Trigger Update : comment sélectionner l'enregistrement en cours

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


  Réponse avec citation
Vieux 14/08/2007, 16h01   #2 (permalink)
bruno reiter
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Trigger Update : comment sélectionner l'enregistrement en cours

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
>


  Réponse avec citation
Vieux 15/08/2007, 07h43   #3 (permalink)
Marcel Wüthrich
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Trigger Update : comment sélectionner l'enregistrement en cours

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
>>

>



  Réponse avec citation
Vieux 15/08/2007, 15h48   #4 (permalink)
Fred BROUARD
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Trigger Update : comment sélectionner l'enregistrement en cours

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 ***********************
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 03h21.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,09945 seconds with 12 queries