SQL Server - synchronisation de 2 tables sur 2 bases de données différentes

j'ai 2 tables avec le même schéma sur 2 bases de données différentes sur le même serveur avec SQL Server 2008 R2. Un tableau est mis à jour plus souvent avec des données.

il faut maintenant synchroniser ces 2 tables. Cela peut se produire comme un processus de nuit. Quelle est la meilleure méthode pour réaliser la synchronisation. processus ?

12
demandé sur GilliVilla 2012-11-29 00:39:19

3 réponses

utiliser MERGE est votre meilleure option. Vous pouvez contrôler chacune des conditions. LORSQU'il y a correspondance alors, LORSQU'il n'y a pas correspondance alors, etc.

MERGE-Technet

MERGE-MSDN (GOOD!)

Exemple: Transactionnelle de l'utilisation des Variables de Table - NO

DECLARE @Source TABLE (ID INT)
DECLARE @Target TABLE (ID INT)

INSERT INTO @Source (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE @Target AS T
USING @Source AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    @Target

exemple B: Utilisation transactionnelle-Tables physiques

CREATE TABLE SRC (ID INT);
CREATE TABLE TRG (ID INT);

INSERT INTO SRC (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE TRG AS T
USING SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    TRG

exemple C: utilisation transactionnelle-Tempdb (local & global)

CREATE TABLE #SRC (ID INT);
CREATE TABLE #TRG (ID INT);

INSERT INTO #SRC (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE #TRG AS T
USING #SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    #TRG
15
répondu Mathew A. 2016-05-05 17:32:26

vous pouvez probablement utiliser le tablediff de sql server.exe utilitaire de ligne de commande. Il peut faire table-par-table, une comparaison unique entre deux tables et générer le sql automatiquement pour vous de synchroniser le plus à la source.

Il y a aussi une interface graphique wrapper autour d'elle http://code.google.com/p/sqltablediff/ ce qui rend la tâche encore plus facile. Il générera la ligne de commande pour vous.

vous pouvez alors créer une tâche programmée pour exécuter la ligne de commande, puis exécuter les scripts sql générés.

4
répondu java4script 2013-05-30 00:02:12

vous pouvez sélectionner dans les différentes bases de données et utiliser un curseur pour boucler les données sélectionnées. Dans ce curseur, vous pouvez faire un peu de logique et mettre à jour ou supprimer de la table cible.

aussi SQL 2008 a une nouvelle déclaration de fusion agréable que vous pouvez utiliser pour sélectionner/Insérer/mettre à jour dans une requête T-SQL. http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx

pour les processus plus complexes, j'utilise la première option. Pour une synchronisation plus simple tâches j'utilise la deuxième option.

comme option supplémentaire il y a aussi des services D'intégration de serveurs (SSIS): http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration-services-ssis-part-i-of-ii.aspx

1
répondu Tys 2012-11-28 20:54:09