48 votes

Comment comparer des données entre deux tables dans différentes bases de données à l'aide de Sql Server 2008 ?

J'ai deux bases de données, nommées DB1 et DB2 dans le serveur SQL 2008. Ces deux bases de données ont également les mêmes tables et les mêmes données de table. Cependant, je veux vérifier s'il y a des différences entre les données de ces tableaux.

Quelqu'un pourrait-il m'aider avec un script pour cela?

7voto

Matt Points 1705

J'ai fait des choses comme ça en utilisant la fonction Checksum (*)

En substance, il crée une somme de contrôle au niveau de la ligne sur toutes les données des colonnes, vous pouvez ensuite comparer la somme de contrôle de chaque ligne pour chaque table les unes aux autres, utiliser une jointure gauche pour trouver des lignes différentes.

J'espère que ça a du sens...

Mieux avec un exemple...

 select *
from 
( select checksum(*) as chk, userid as k from UserAccounts) as t1
left join 
( select checksum(*) as chk, userid as k from UserAccounts) as t2 on t1.k = t2.k
where t1.chk <> t2.chk 

3voto

evpo Points 1108
select * from DB1.dbo.Table a inner join DB2.dbo.Table b on b.PrimKey = a.PrimKey 
where a.FirstColumn <> b.FirstColumn ...

La somme de contrôle recommandée par Matt est probablement une meilleure approche pour comparer les colonnes plutôt que de comparer chaque colonne

3voto

edward Points 89

Comparaison des deux bases de données dans la base de données SQL. Essayez cette requête, cela peut vous aider.

 SELECT T.[name] AS [table_name], AC.[name] AS [column_name],  TY.[name] AS 
   system_data_type FROM    [***Database Name 1***].sys.[tables] AS T  
   INNER JOIN [***Database Name 1***].sys.[all_columns] AC ON T.[object_id] = AC.[object_id]      
   INNER JOIN [***Database Name 1***].sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id] 
   EXCEPT SELECT T.[name] AS [table_name], AC.[name] AS [column_name], TY.[name] AS system_data_type FROM    ***Database Name 2***.sys.[tables] AS T  
   INNER JOIN ***Database Name 2***.sys.[all_columns] AC ON T.[object_id] = AC.[object_id]  
   INNER JOIN ***Database Name 2***.sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X