OVH Cloud OVH Cloud

Question sur Trigger

8 réponses
Avatar
Davelop
Bonjour,
Je souhaiterais cr=E9er un trigger qui s'execute =E0 chaque=20
ajout ou modif d'une de mes tables mais je ne sais pas=20
comment limiter ma requ=EAte seulement =E0 l'enregistrement en=20
cours.
Ci-dessous, ce trigger fonctionne mais Update enti=E8rement=20
ma table plutot que seulement l'enregistrement en cours.
Quel crit=E8re rajouter =E0 ma requ=EAte Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 =3D champ2+champ3

8 réponses

Avatar
Alexis Leroy
Regarder les tables deleted et inserted dans l'aide. Elles contiennent les
enregistrement ajoutés ou/et supprimés.

Alexis Leroy
Promotool.com

"Davelop" a écrit dans le message de
news:5a4501c3e59e$875d2d90$
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3
Avatar
DAVELOP
Désolé mais je ne comprend pas ce que je dois faire
exactement.



-----Message d'origine-----
Regarder les tables deleted et inserted dans l'aide.


Elles contiennent les
enregistrement ajoutés ou/et supprimés.

Alexis Leroy
Promotool.com

"Davelop" a écrit dans le message de
news:5a4501c3e59e$875d2d90$
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3


.



Avatar
Patrice Scribe
Extrait de l'aide en ligne SQL Serveur :

La table deleted stocke des copies des lignes affectées par les instructions
DELETE et UPDATE. Pendant l'exécution d'une instruction DELETE ou UPDATE,
certaines lignes sont supprimées de la table du déclencheur et déplacées
vers la table deleted. La table deleted et la table du déclencheur ne
possèdent habituellement pas de ligne en commun.

La table inserted stocke des copies des lignes affectées par les
instructions INSERT et UPDATE. Durant une transaction INSERT ou UPDATE, de
nouvelles lignes sont ajoutées simultanément dans la table inserted et dans
la table du déclencheur. Les lignes de la table inserted sont des copies des
lignes créées dans la table du déclencheur.

Voir "Utilisation des tables inserted et deleted" pour le chapitre
complet...

Patrice


--

"DAVELOP" a écrit dans le message de
news:5cf301c3e5a5$8c81fec0$
Désolé mais je ne comprend pas ce que je dois faire
exactement.



-----Message d'origine-----
Regarder les tables deleted et inserted dans l'aide.


Elles contiennent les
enregistrement ajoutés ou/et supprimés.

Alexis Leroy
Promotool.com

"Davelop" a écrit dans le message de
news:5a4501c3e59e$875d2d90$
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3


.



Avatar
DAVELOP
J'ai été voir l'aide sur cette rubrique mais mes limites
SQL server ont été dépassés :((
Je comprend pas ce que je dois faire exactement dans mon
trigger.


-----Message d'origine-----
Extrait de l'aide en ligne SQL Serveur :

La table deleted stocke des copies des lignes affectées


par les instructions
DELETE et UPDATE. Pendant l'exécution d'une instruction


DELETE ou UPDATE,
certaines lignes sont supprimées de la table du


déclencheur et déplacées
vers la table deleted. La table deleted et la table du


déclencheur ne
possèdent habituellement pas de ligne en commun.

La table inserted stocke des copies des lignes affectées


par les
instructions INSERT et UPDATE. Durant une transaction


INSERT ou UPDATE, de
nouvelles lignes sont ajoutées simultanément dans la


table inserted et dans
la table du déclencheur. Les lignes de la table inserted


sont des copies des
lignes créées dans la table du déclencheur.

Voir "Utilisation des tables inserted et deleted" pour le


chapitre
complet...

Patrice


--

"DAVELOP" a écrit dans le message de
news:5cf301c3e5a5$8c81fec0$
Désolé mais je ne comprend pas ce que je dois faire
exactement.



-----Message d'origine-----
Regarder les tables deleted et inserted dans l'aide.


Elles contiennent les
enregistrement ajoutés ou/et supprimés.

Alexis Leroy
Promotool.com

"Davelop" a écrit dans le message de
news:5a4501c3e59e$875d2d90$
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement




en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3




Avatar
Nicolas LETULLIER
En imaginant que MaCle soit la clé primaire de la table ma_table, il faut
faire une jointure ou une sous-requête entre la table ma_table et la
pseudo-table INSERTED pour savoir quelles sont les lignes à modifier.

Attention, ne pas oublier qu'en cas de MAJ multiple (de plusieurs lignes)
sur une table, le trigger n'est exécuté qu'une seule fois.

En gros

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table
SET champ1 = champ2+champ3
WHERE MaCle IN (SELECT MaCle FROM INSERTED)

Nicolas


"DAVELOP" a écrit dans le message de
news:69d601c3e671$a7a3d210$
J'ai été voir l'aide sur cette rubrique mais mes limites
SQL server ont été dépassés :((
Je comprend pas ce que je dois faire exactement dans mon
trigger.


-----Message d'origine-----
Extrait de l'aide en ligne SQL Serveur :

La table deleted stocke des copies des lignes affectées


par les instructions
DELETE et UPDATE. Pendant l'exécution d'une instruction


DELETE ou UPDATE,
certaines lignes sont supprimées de la table du


déclencheur et déplacées
vers la table deleted. La table deleted et la table du


déclencheur ne
possèdent habituellement pas de ligne en commun.

La table inserted stocke des copies des lignes affectées


par les
instructions INSERT et UPDATE. Durant une transaction


INSERT ou UPDATE, de
nouvelles lignes sont ajoutées simultanément dans la


table inserted et dans
la table du déclencheur. Les lignes de la table inserted


sont des copies des
lignes créées dans la table du déclencheur.

Voir "Utilisation des tables inserted et deleted" pour le


chapitre
complet...

Patrice


--

"DAVELOP" a écrit dans le message de
news:5cf301c3e5a5$8c81fec0$
Désolé mais je ne comprend pas ce que je dois faire
exactement.



-----Message d'origine-----
Regarder les tables deleted et inserted dans l'aide.


Elles contiennent les
enregistrement ajoutés ou/et supprimés.

Alexis Leroy
Promotool.com

"Davelop" a écrit dans le message de
news:5a4501c3e59e$875d2d90$
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement




en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3




Avatar
DAVELOP
OK merci beaucoup c'est plus clair pour mon niveau. Merci
quand même aux autres.

Ces tables inserted et deleted ne sont pas visible
d'entreprise manager. elles sont cachées ou crées
temporairement le temps de la transaction ?

Et que se soit une requête "insert" ou "update" est-ce
toujours la table "inserted" qui est utilisé ?



-----Message d'origine-----
En imaginant que MaCle soit la clé primaire de la table


ma_table, il faut
faire une jointure ou une sous-requête entre la table


ma_table et la
pseudo-table INSERTED pour savoir quelles sont les lignes


à modifier.

Attention, ne pas oublier qu'en cas de MAJ multiple (de


plusieurs lignes)
sur une table, le trigger n'est exécuté qu'une seule fois.

En gros

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table
SET champ1 = champ2+champ3
WHERE MaCle IN (SELECT MaCle FROM INSERTED)

Nicolas


Avatar
Alexis Leroy
Les tables inserted et deleted ne sont accessible que dans le trigger.
Dans le cas d'un INSERT, la table inserted contient l'ensemble des lignes
insérées.
Dans le cas d'un DELETE, la table deleted contient l'ensemble des lignes
supprimées.
Dans le cas d'un UPDATE, la table inserted contient les nouvelles valeurs et
la table deleted contient les ancienne valeurs (celles d'avant l'UPDATE).


Cordialement,

Alexis Leroy


"DAVELOP" a écrit dans le message de
news:645e01c3e679$cd0a6e30$
OK merci beaucoup c'est plus clair pour mon niveau. Merci
quand même aux autres.

Ces tables inserted et deleted ne sont pas visible
d'entreprise manager. elles sont cachées ou crées
temporairement le temps de la transaction ?

Et que se soit une requête "insert" ou "update" est-ce
toujours la table "inserted" qui est utilisé ?



-----Message d'origine-----
En imaginant que MaCle soit la clé primaire de la table


ma_table, il faut
faire une jointure ou une sous-requête entre la table


ma_table et la
pseudo-table INSERTED pour savoir quelles sont les lignes


à modifier.

Attention, ne pas oublier qu'en cas de MAJ multiple (de


plusieurs lignes)
sur une table, le trigger n'est exécuté qu'une seule fois.

En gros

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table
SET champ1 = champ2+champ3
WHERE MaCle IN (SELECT MaCle FROM INSERTED)

Nicolas


Avatar
Fred BROUARD
a lire pour comprendre :
http://sqlpro.developpez.com/TransactSQL/SQL_MSTransactSQL.html
paragraphe :
4 - Les triggers

A +


Davelop a écrit:
Bonjour,
Je souhaiterais créer un trigger qui s'execute à chaque
ajout ou modif d'une de mes tables mais je ne sais pas
comment limiter ma requête seulement à l'enregistrement en
cours.
Ci-dessous, ce trigger fonctionne mais Update entièrement
ma table plutot que seulement l'enregistrement en cours.
Quel critère rajouter à ma requête Update ?

CREATE TRIGGER nom_trigger ON ma_table
FOR INSERT,UPDATE
AS
UPDATE ma_table SET champ1 = champ2+champ3



--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************