Bonjour,
je voudrais créer un trigger afterupdate sur une table1 en pour mettre a jour les donnée de la table2 dé qu'un champ et modifier sur la table1 .
Si quelqu'un pouvait m'éclairer, ça m'aiderait grandement !
Merci d'avance
Bonjour,
je voudrais créer un trigger afterupdate sur une table1 en pour mettre a jour les donnée de la table2 dé qu'un champ et modifier sur la table1 .
Si quelqu'un pouvait m'éclairer, ça m'aiderait grandement !
Merci d'avance
Bonjour,
Il faudrait poster la structure des deux tables, indiquer ce que vous voulez faire
et indiquer surtout ce que vous avez déjà fait et là où se trouve votre problème.
Tu peux faire quelque chose comme cela
A+
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 CREATE TRIGGER dbo.TR_Table1_IUD ON dbo.Table1 AFTER INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON ;WITH Source AS ( SELECT I.Id AS I_Id , I.Col2 , I.Col3 , I.Col4 , etc.. , .... , D.Id AS D_Id FROM Inserted I FULL OUTER JOIN Deleted D ON D.Id = I.Id ) MERGE INTO dbo.Table2 As Target USING Source On Source.I_Id = Target.Id WHEN MATCHED THEN -- sous entend Target.Id = I_Id UPDATE SET Target.Col2 = Source.Col2 , Target.Col3 = Source.Col3 , Target.Col4 = Source.Col4 , etc.. WHEN NOT MATCHED BY Target AND Source.I_Id IS NOT NULL THEN -- la clause AND Source.I_Id IS NOT NULL est facultatif, c'est juste pour la forme et la clarté INSERT ( Id, Col2, Col3, ..... ) VALUES ( Source.I_Id, Source.Col2, Source.Col3, .... ) WHEN NOT MATCHED BY Source AND Target.Id = D_Id THEN DELETE; END;
"Une idée mal écrite est une idée fausse !"
http://hamid-mira.blogspot.com
Je ne pense pas qu'un trigger soit la meilleure solution ici.
Si vous voulez répliquer des données, utilisez les mécanismes de réplication transactionnelle.
Email : http://scr.im/waldar
Oui l'erreur est tout ce qu'il y a de normal ! C'est mentionné en clair dans la BOL : "target_table ne peut pas être une table distante"
Il faut que précisiez votre contexte, il faut que vous donniez plus d'informations sur votre architecture ; précisez par exemple si vous utilisez des Serveur liés, des transactions distribuées, etc.
Si d'aventure, la table Table2 est située sur un Serveur lié distant (?) Ce serait complètement stupide de vouloir mettre à jour la table 2 de manière synchrone !
En effet, votre Serveur lié distant peut très bien être, par moment, injoignable, et ce , pour diverses raisons (informations de connexion erronées, problèmes de réseau etc.) et pendant ce temps, vous n'allez tout de même pas bloquer votre système de production !
Le mécanisme de la réplication transactionnelle, déjà soufflé ci-dessus par Waldar, est justement prévu pour apporter une solution viable à ce genre de problématique, et est de loin la mieux appropriée.
Maintenant, si cela vous chante, vous pouvez toujours inventer une solution faite maison ; consigner les données modifiées, puis avoir recours aux tâches planifiées, etc. pour la synchronisation.
A+
"Une idée mal écrite est une idée fausse !"
http://hamid-mira.blogspot.com
Les 2 serveurs sont liés, j'ai déjà créé un trigger afterinsert son but est de créer l'article sur srv2.base2 après ça création sur srv1.base1.
Maintenant ce que jeux faire c'est si l'article a été modifié ou supprimé sur srv1.base1 il doit être modifié ou supprimé sur srv2.base2
Pouvez-vous poster la structure des 2 Tables (Table1 et Table2) supposées être identiques, poster également le trigger after Insert que vous avez déjà rédigé. Nous pourrions ainsi mieux vous aider pour la suite.
Sachant que, comme je l'ai déjà expliqué ci-dessus, la mise à jour synchrone, par trigger, de la table distante table2 me parait une solution hasardeuse, mais bon, c'est votre choix, vous verrez les problèmes à l'usage !
A+
"Une idée mal écrite est une idée fausse !"
http://hamid-mira.blogspot.com
Le trigger afterinsert :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TRIGGER trgAfterupdate ON [nom base1].[dbo].[ARTICLE] FOR update AS update [nom serveur2].[nom base 2].[dbo].[ARTICLE] set GA_libelle=u.GA_LIBELLE, GA_CODEARTICLE =u.GA_codearticle from [mar2008].[dbo].[ARTICLE] as i inner join inserted u on i.GA_LIBELLE = u.GA_LIBELLE and i.GA_codearticle = u.GA_codearticle
vous me proposez de faire la réplication transactionnelle ?
Bonjour les perfs le trigger faisant partie de votre transaction!
En effet réplication transactionnelle...
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
MCTS Database Administration
Oui, l'idéal comme cela a déjà été dit, c'est la réplication transactionnelle.
Le trigger que vous venez de poster est un Trigger After Update et non pas after Insert !
Par ailleurs, même dans ce trigger after update je ne vois pas bien l'intérêt de la colonne libellée dans la clause ON de l'instruction Update (?)
(i.GA_LIBELLE = u.GA_LIBELLE) !!!
Ce ce fait votre Trigger after update ne sert à rien ! puisqu'il réaffecte les mêmes valeurs des 2 colonnes GA_libelle et GA_CODEARTICLE puisque celles-ci sont préalablement vérifiées dans la clause ON de la jointure interne de l'instruction Update !
Que représente [Mars2008] ? représente-elle [Nom base 2] ?
A défaut d'avoir la structure de la table Article, quelle est au moins la clé primaire de la table ARTICLE ?
"Une idée mal écrite est une idée fausse !"
http://hamid-mira.blogspot.com
DSL voici le trigger afterinsert
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TRIGGER trgAfterInsert ON [base1].[dbo].[ARTICLE] FOR INSERT AS insert into [base2].[dbo].[ARTICLE] (ga_codearticle,ga_libelle) SELECT ga_codearticle,ga_libelle FROM inserted;
il n y a pas de clé primaire sur la table article
Vous voulez synchroniser des tables qui ne sont même pas dotées d'une clé primaire ! Autant jouer à la roulette russe.
Les tables sans clé primaires sont généralement déconseillées ! Le modèle relationnel impose à priori, parmi les règles d'intégrité structurelle, une règle minimale, celle de l'unicité des clés.
En outre, il est impossible de créer une réplication transactionnelle sur les tables sans clé primaire.
La connerie ne s'arrêtera donc t-elle jamais ?
A+
"Une idée mal écrite est une idée fausse !"
http://hamid-mira.blogspot.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager