Autre que tablediff et powershell mentionnés dans les réponses précédentes, vous pouvez également utiliser SQL avec l'instruction UNION ALL pour trouver les enregistrements qui ne correspondent pas dans 2 tables identiques:
SELECT MIN(TableName) AS TableName
,ID
,NAME
,lastname
,Address
,City
FROM (
SELECT 'Table A' AS TableName
,Customers.id
,Customers.NAME
,Customers.lastname
,Customers.Address
,Customers.City
FROM Customers
UNION ALL
SELECT 'Table B' AS TableName
,CustomersOld.id
,CustomersOld.NAME
,CustomersOld.lastname
,CustomersOld.Address
,CustomersOld.City
FROM CustomersOld
) tmp
GROUP BY ID
,NAME
,lastname
,Address
,City
HAVING COUNT(*) = 1
ORDER BY id;
Une autre option que vous pouvez essayer est d'utiliser la comparaison de données dans Visual Studio lui-même. Il compare les données de la base de données source et de la base de données cible et crée un script de synchronisation pour les tables que vous avez sélectionnées pour la synchronisation.
Et enfin, vous pouvez utiliser l'outil de comparaison de données SQL - ApexSQL Data Diff , pour définir toutes les options de synchronisation, mapper les tables et les colonnes avec des noms différents, créer vos propres clés de comparaison dans l'interface graphique. Vous pouvez planifier son exécution sans surveillance et tout ce que vous avez à faire est de vérifier l'historique des travaux SQL Server le matin. Si vous avez besoin de plus de détails sur ces options, je vous recommande de lire cet article: http://solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/
Utilisation d'outils natifs:
tablediff : l' utilitaire tablediff compare les données de la table source à la table de la table de destination.
powershell: compare-object vous permet d'atteindre cet objectif. Voici un bon exemple
tierce personne:
le schéma Redgate et la comparaison des données. Vous pouvez même utiliser PowerShell et comparer schéma / données pour automatiser les choses.
la source
J'ai récemment utilisé celui-ci dans un but similaire:
Il repose sur la cohérence de la clé primaire. Mais vous devez avoir quelque chose de cohérent après tout. Un méta script pour générer du code comme ci-dessus est relativement facile à écrire et rend les tableaux à plusieurs colonnes faciles à comparer.
En ce qui concerne la synchronisation, vous devrez
source left join target
ettarget left join source
, puis décider ce que vous voulez faire avec le résultat de chacun.la source
Cela devrait vous donner les différences entre les deux tables, vous pouvez ensuite envelopper cela dans une requête d'insertion pour mettre les différences de A en B ou vice versa.
la source
Un de nos outils gratuits a une interface complète pour TableDiff:
http://nobhillsoft.com/Diana.aspx
Consultez également notre outil de comparaison de bases de données. C'est le seul qui compare une quantité illimitée de données (aucun des autres ne peut faire des millions et des millions d'enregistrements)… tant que vous comparez entre 2 serveurs liés
http://nobhillsoft.com/NHDBCompare.aspx
(nous avons vu d'autres liens dans ce fil pour les produits tiers, nous pensons donc qu'il est légitime de mentionner le nôtre ... veuillez nous le faire savoir si ce n'est pas le cas)
la source
Si les deux tables ont des clés primaires similaires, vous pouvez utiliser la stratégie ci-dessous pour comparer les tables source et cible: (J'ai marqué les colonnes de clé composite avec un astérisque)
Cela fonctionne car l'union renvoie implicitement des enregistrements distincts. Donc, pour une ligne donnée (identifiée par une clé) dans la source que vous attendez pour correspondre exactement dans la cible, vous vous attendriez à ce qu'une union du src et de la cible renvoie 1 ligne pour une clé donnée. Ainsi, vous pouvez utiliser la stratégie ci-dessus pour savoir quelles clés renvoient un résultat d'union comportant plusieurs lignes, puis interroger à nouveau la cible d'union src (cette fois uniquement en sélectionnant les enregistrements présentant des différences en se joignant à la table diff) en sélectionnant toutes les colonnes que vous souhaitez comparer, ordonner par les colonnes composant la clé, et vous verrez exactement quelles colonnes ne correspondent pas. Notez que les noms de colonne dans la source et la cible ne doivent pas nécessairement correspondre, car ils peuvent être aliasés l'un à l'autre à l'aide d'une instruction "as".
la source
Pour trouver les différences entre deux tables identiques
SELECT *
DE SOURCE01.dbo.Customers
UNION
SELECT *
DE TARGET01.dbo.Customers
SAUF
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
DE TARGET01.dbo.Customers
L'ordre des opérations fait que l'INTERSECT est exécuté en premier, ce qui vous donnera un ensemble de données de seulement les lignes qui existent dans les deux tables. Deuxièmement, l'UNION est effectuée, ce qui vous donne toutes les lignes des deux tables sans doublons. Enfin, l'EXCEPT est effectué qui supprime de votre UNION (toutes les lignes des deux tables) l'ensemble de données INTERSECT qui est les lignes des deux tables. Cela vous laisse avec un jeu de données contenant uniquement les lignes qui existent dans l'une des tables mais pas dans l'autre. Si votre jeu de données revient vide, toutes les lignes sont identiques entre les tables.
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
la source
J'ai eu un problème similaire et j'ai utilisé la commande SQL 'EXCEPT' pour résoudre le problème. La commande EXCEPT prend deux instructions SELECT et renvoie les lignes qui sont renvoyées par la première instruction SELECT (à gauche) et non par la seconde (SELECT) instruction SELECT.
PS: le schéma des deux tables renvoyées par l'instruction SELECT doit correspondre.
Pour plus de clarté, visitez la page Point des didacticiels ici
la source
Le script (lorsqu'il est fourni avec les détails pertinents) compare 2 tables (par exemple, Clients sur le serveur1 et Clients sur le serveur2).
Ce script sera pratique si vous comparez une table avec de nombreuses colonnes mais que vous avez du mal à trouver la colonne exacte qui ne correspond pas.
J'ai une table avec 353 colonnes et j'ai dû la comparer à une autre table et trouver avec des valeurs qui ne correspondaient pas et ce script vous aidera à localiser le tuple exact.
la source
Je pense que vous devriez essayer xSQL Data Compare , qui fera l'affaire dans votre cas. Disons par exemple que vous spécifiez
Après avoir comparé les tables, dans le résultat de la comparaison, vous pouvez spécifier que vous souhaitez synchroniser uniquement les différences de la table de gauche qui produirait un script SQL à insérer dans TARGET01.dbo.Customers toutes les lignes qui ne figurent pas dans cette table mais existent dans SOURCE01.dbo.Customers (Obtention d'un résultat UNION sans doublons). J'espère que cela t'aides!
Divulgation: je suis affilié à xSQL.
la source