Bonjour
je souhaiterai savoir si un trigger se déclenche que pour un enregistrement
à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car
j'ai vu un trigger qui fait un cursor avec les enregistrements de la table
inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour
des enregistrement de cette table. Ci-dessous le trigger :
ON [dbo].[CONTRATS]
FOR UPDATE
AS
DECLARE CONTRATS_Insert_CRM_EMONET_TO_DST CURSOR FOR
SELECT DISTINCT idcontrat, crm_iddevis FROM inserted;
OPEN CONTRATS_Insert_CRM_EMONET_TO_DST;
FETCH NEXT FROM CONTRATS_Insert_CRM_EMONET_TO_DST INTO @idcontrat, @iddst;
begin
WHILE @@FETCH_STATUS = 0
BEGIN
-- Appel de la procédure
EXEC dbo.Trig_CRM_EMonet_To_Dst_Ajout @ced_name_table_emonet,
@idcontrat, @iddst, @ced_niv_priorite;
-- Petit update sur CONTRATS_CLIENTS_LIVRES afin de communiquer les
Destinataires
update contrats_clients_livres set idcontrat = idcontrat where idcontrat
= @idcontrat;
FETCH NEXT FROM CONTRATS_Insert_CRM_EMONET_TO_DST INTO @idcontrat, @iddst;
END
end
CLOSE CONTRATS_Insert_CRM_EMONET_TO_DST;
DEALLOCATE CONTRATS_Insert_CRM_EMONET_TO_DST;
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
TedIF
Hamet a couché sur son écran :
Bonjour je souhaiterai savoir si un trigger se déclenche que pour un enregistrement à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car j'ai vu un trigger qui fait un cursor avec les enregistrements de la table inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
--
Dominique
Hamet a couché sur son écran :
Bonjour
je souhaiterai savoir si un trigger se déclenche que pour un enregistrement
à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car
j'ai vu un trigger qui fait un cursor avec les enregistrements de la table
inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour
des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table
INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A
ne pas oublier !
Bonjour je souhaiterai savoir si un trigger se déclenche que pour un enregistrement à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car j'ai vu un trigger qui fait un cursor avec les enregistrements de la table inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
--
Dominique
Hamet
Merci Mais-peux-tu me donner plus de précision ? Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois qu'il y a d'insert dans le lot. Ce n'est pas cela ?
"TedIF" a écrit :
Hamet a couché sur son écran : > Bonjour > je souhaiterai savoir si un trigger se déclenche que pour un enregistrement > à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car > j'ai vu un trigger qui fait un cursor avec les enregistrements de la table > inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour > des enregistrement de cette table. Ci-dessous le trigger : >
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
--
Dominique
Merci
Mais-peux-tu me donner plus de précision ?
Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete
ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois
qu'il y a d'insert dans le lot. Ce n'est pas cela ?
"TedIF" a écrit :
Hamet a couché sur son écran :
> Bonjour
> je souhaiterai savoir si un trigger se déclenche que pour un enregistrement
> à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car
> j'ai vu un trigger qui fait un cursor avec les enregistrements de la table
> inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour
> des enregistrement de cette table. Ci-dessous le trigger :
>
un trigger se déclenche aussi sur des traitements par lots. La table
INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A
ne pas oublier !
Merci Mais-peux-tu me donner plus de précision ? Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois qu'il y a d'insert dans le lot. Ce n'est pas cela ?
"TedIF" a écrit :
Hamet a couché sur son écran : > Bonjour > je souhaiterai savoir si un trigger se déclenche que pour un enregistrement > à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car > j'ai vu un trigger qui fait un cursor avec les enregistrements de la table > inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour > des enregistrement de cette table. Ci-dessous le trigger : >
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
Si vous faites 3 mises à jour par 3 instructions successives, alors le trigger se déclenchera 3 fois. Si vous faites 1 mise à jour avec une instruction qui met à jour 3 lignes d'un coup par exemple, alors le trigger ne se déclenchera qu'une seule fois et les tables inserted et deleted contiendront 3 lignes.
Exemple :
On envoie l'instruction : UPDATE MaTable SET MaColonne = 'toto' where MaColonneClePrimaire = 1
Le trigger va se déclencher une fois et les tables inserted et deleted ne contiendront qu'une ligne : celle qui est mise à jour.
Maintenant, on envoie l'instruction : UPDATE MaTable SET MaColonne = 'toto' where MaColonneClePrimaire = 1 or MaColonneClePrimaire = 2 or MaColonneClePrimaire = 3
Le trigger va se déclencher qu'une seule fois toujours, mais cette fois les tables inserted et deleted contiendront 3 lignes : celles correspondant aux valeurs de clé primaire 1, 2 et 3. -- Jérôme
Bonjour,
"Hamet" <Hamet@discussions.microsoft.com> a écrit dans le message de
news: 167583F3-6F27-40F4-AF3D-12FE0AC8AF8B@microsoft.com...
Si vous faites 3 mises à jour par 3 instructions successives, alors le
trigger se déclenchera 3 fois.
Si vous faites 1 mise à jour avec une instruction qui met à jour 3
lignes d'un coup par exemple, alors le trigger ne se déclenchera qu'une
seule fois et les tables inserted et deleted contiendront 3 lignes.
Exemple :
On envoie l'instruction :
UPDATE MaTable
SET MaColonne = 'toto'
where MaColonneClePrimaire = 1
Le trigger va se déclencher une fois et les tables inserted et deleted
ne contiendront qu'une ligne : celle qui est mise à jour.
Maintenant, on envoie l'instruction :
UPDATE MaTable
SET MaColonne = 'toto'
where MaColonneClePrimaire = 1 or MaColonneClePrimaire = 2 or
MaColonneClePrimaire = 3
Le trigger va se déclencher qu'une seule fois toujours, mais cette fois
les tables inserted et deleted contiendront 3 lignes : celles
correspondant aux valeurs de clé primaire 1, 2 et 3.
--
Jérôme
Si vous faites 3 mises à jour par 3 instructions successives, alors le trigger se déclenchera 3 fois. Si vous faites 1 mise à jour avec une instruction qui met à jour 3 lignes d'un coup par exemple, alors le trigger ne se déclenchera qu'une seule fois et les tables inserted et deleted contiendront 3 lignes.
Exemple :
On envoie l'instruction : UPDATE MaTable SET MaColonne = 'toto' where MaColonneClePrimaire = 1
Le trigger va se déclencher une fois et les tables inserted et deleted ne contiendront qu'une ligne : celle qui est mise à jour.
Maintenant, on envoie l'instruction : UPDATE MaTable SET MaColonne = 'toto' where MaColonneClePrimaire = 1 or MaColonneClePrimaire = 2 or MaColonneClePrimaire = 3
Le trigger va se déclencher qu'une seule fois toujours, mais cette fois les tables inserted et deleted contiendront 3 lignes : celles correspondant aux valeurs de clé primaire 1, 2 et 3. -- Jérôme
Fred BROUARD
Hamet a écrit :
Merci Mais-peux-tu me donner plus de précision ? Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois qu'il y a d'insert dans le lot. Ce n'est pas cela ?
NON, NON et NON !
Le trigger se déclenche une seule fois, suite à l'ordre SQL visé quelque soit le nombre de ligne de 0 à 3 millions.
votre code doit donc être si possible et surtout éviter : 1) les variables locales 2) les curseurs...
N'oubliez pas que dans le trigger vous êtes au sein de la transaction qui n'est pas encore terminée. Tout le code que vous y mettrez rallongera donc d'autant la durée de le transaction....
En l'occurrence remplacez votre appel de proc stock dans le curseur par quelque chose comme :
CREATE TRIGGER ... ON [dbo].[CONTRATS] FOR UPDATE AS
INSERT INTO maTable SELECT DISTINCT idcontrat, crm_iddevis ... FROM inserted WHERE ....
update contrats_clients_livres set idcontrat = idcontrat FROM inserted where ...
A +
"TedIF" a écrit :
Hamet a couché sur son écran :
Bonjour je souhaiterai savoir si un trigger se déclenche que pour un enregistrement à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car j'ai vu un trigger qui fait un cursor avec les enregistrements de la table inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
--
Dominique
-- 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 ***********************
Hamet a écrit :
Merci
Mais-peux-tu me donner plus de précision ?
Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete
ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois
qu'il y a d'insert dans le lot. Ce n'est pas cela ?
NON, NON et NON !
Le trigger se déclenche une seule fois, suite à l'ordre SQL visé quelque
soit le nombre de ligne de 0 à 3 millions.
votre code doit donc être si possible et surtout éviter :
1) les variables locales
2) les curseurs...
N'oubliez pas que dans le trigger vous êtes au sein de la transaction
qui n'est pas encore terminée. Tout le code que vous y mettrez
rallongera donc d'autant la durée de le transaction....
En l'occurrence remplacez votre appel de proc stock dans le curseur par
quelque chose comme :
CREATE TRIGGER ...
ON [dbo].[CONTRATS]
FOR UPDATE
AS
INSERT INTO maTable
SELECT DISTINCT idcontrat, crm_iddevis ...
FROM inserted
WHERE ....
update contrats_clients_livres
set idcontrat = idcontrat
FROM inserted
where ...
A +
"TedIF" a écrit :
Hamet a couché sur son écran :
Bonjour
je souhaiterai savoir si un trigger se déclenche que pour un enregistrement
à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car
j'ai vu un trigger qui fait un cursor avec les enregistrements de la table
inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour
des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table
INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A
ne pas oublier !
--
Dominique
--
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 ***********************
Merci Mais-peux-tu me donner plus de précision ? Pour moi le trigger se déclenche à chaque fois qu'il y a un ubdate, delete ou insert. Si on fait un lot d'inserted, il se déclenchera autant de fois qu'il y a d'insert dans le lot. Ce n'est pas cela ?
NON, NON et NON !
Le trigger se déclenche une seule fois, suite à l'ordre SQL visé quelque soit le nombre de ligne de 0 à 3 millions.
votre code doit donc être si possible et surtout éviter : 1) les variables locales 2) les curseurs...
N'oubliez pas que dans le trigger vous êtes au sein de la transaction qui n'est pas encore terminée. Tout le code que vous y mettrez rallongera donc d'autant la durée de le transaction....
En l'occurrence remplacez votre appel de proc stock dans le curseur par quelque chose comme :
CREATE TRIGGER ... ON [dbo].[CONTRATS] FOR UPDATE AS
INSERT INTO maTable SELECT DISTINCT idcontrat, crm_iddevis ... FROM inserted WHERE ....
update contrats_clients_livres set idcontrat = idcontrat FROM inserted where ...
A +
"TedIF" a écrit :
Hamet a couché sur son écran :
Bonjour je souhaiterai savoir si un trigger se déclenche que pour un enregistrement à la fois. C'est veut dire qu'il y a qu'une ligne dans la table Inserted. Car j'ai vu un trigger qui fait un cursor avec les enregistrements de la table inserted. Pouvez vous me dire si cela sert à quelque chose de boucler autour des enregistrement de cette table. Ci-dessous le trigger :
un trigger se déclenche aussi sur des traitements par lots. La table INSERTEd et DELETED peuvent donc contenir plusieurs enregistrements. A ne pas oublier !
--
Dominique
-- 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 ***********************