J'écris une procédure stockée qui devrait synchroniser une table de notre environnement de production à notre environnement de test (une fois par jour). J'ai 2 tables. Pour le rendre facile, appelons-les Mètres et Mesures. Je veux garder les mesures synchronisées et supposer que je peux ajouter manuellement un compteur à mon environnement de test. Meter_id peut se désynchroniser entre les deux bases de données, mais Location ne change pas.MERGE INTO Avec entre production et test où les tables à fusionner ont besoin d'une jointure
J'ai mis en place un lien de base de données vers notre serveur de test appelé db_test. Maintenant, je voudrais utiliser une instruction de fusion pour mettre à jour Mesures @ db_test
MERGE INTO [email protected]_test meas_test
USING Measurements meas
ON (???)
WHEN MATCHED THEN
-- Do update
WHEN NOT MATCHED THEN
-- Do insert
Je pensais dans cette direction ...
MERGE INTO [email protected]_test meas_test
USING (SELECT value, location
FROM meters mtr, measurements meas
WHERE mtr.meter_id = meas.meter_id AND
MeasurementTime > sysdate - 1) meas_new
ON (meas_new.location = ??? AND
meas_new.value = meas_test.value AND
meas_new.MeasurementTime = meas_test.MeasurementTime)
WHEN MATCHED THEN
-- Do update
WHEN NOT MATCHED THEN
-- Do insert
Alors, comment puis-je jeter les joindre à la table des compteurs afin que Je suis sûr qu'ils correspondent sur place et non sur ID
Je suppose que ça devrait être ça. Je pensais que vous ne pourriez pas utiliser l'alias meas_test à l'intérieur de l'USING (sous-sélection) et y déposer la jointure. Mais en y réfléchissant, cela pourrait fonctionner. Je vais essayer lundi, mais je l'accepterai comme la bonne réponse. Merci. –