Além de tablediff e powershell mencionados nas respostas anteriores, você também pode usar o SQL com a instrução UNION ALL para encontrar os registros que não correspondem em 2 tabelas idênticas:
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;
Outra opção que você pode tentar é usar a Comparação de dados no próprio Visual Studio. Ele compara os dados no banco de dados de origem e de destino e cria um script de sincronização para as tabelas que você selecionou para sincronização.
E por último, mas não menos importante, você pode usar a ferramenta de comparação de dados SQL - ApexSQL Data Diff , para definir todas as opções de sincronização, mapear as tabelas e colunas com nomes diferentes, criar suas próprias chaves para comparação na GUI. Você pode agendá-lo para execução autônoma e tudo o que você precisa fazer é verificar o histórico de tarefas do SQL Server pela manhã. Se você precisar de mais detalhes sobre essas opções, recomendo a leitura deste artigo: http://solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/
Usando ferramentas nativas:
tablediff : o utilitário tablediff compara os dados na tabela de origem com a tabela na tabela de destino.
powershell: compare-object permite que você consiga isso. Aqui está um bom exemplo
terceiro:
esquema do redgate e comparação de dados. Você pode até usar o PowerShell e a comparação de esquema / dados para automatizar as coisas.
fonte
Eu usei este recentemente para uma finalidade semelhante:
Depende da chave primária ser consistente. Mas você precisa ter algo consistente, afinal. Um meta script para gerar código como o acima é relativamente fácil de escrever e facilita a comparação de tabelas de várias colunas.
Quanto à sincronização, você precisará
source left join target
etarget left join source
, em seguida, decida o que deseja fazer com o resultado de cada um.fonte
Isso deve fornecer as diferenças entre as duas tabelas. Em seguida, você pode agrupar isso em uma consulta de inserção para colocar as diferenças de A em B ou vice-versa.
fonte
Uma de nossas ferramentas gratuitas possui uma interface completa para o TableDiff:
http://nobhillsoft.com/Diana.aspx
Além disso, confira nossa ferramenta de comparação de banco de dados. É o único por aí que compara uma quantidade ilimitada de dados (outros não podem fazer milhões e milhões de registros) ... desde que você compare entre dois servidores vinculados
http://nobhillsoft.com/NHDBCompare.aspx
(vimos outros links neste tópico para produtos de terceiros, por isso acreditamos que é legítimo mencionar o nosso ... por favor, deixe-nos saber se não é)
fonte
Se ambas as tabelas tiverem chaves primárias semelhantes, você poderá usar a estratégia abaixo para comparar as tabelas de origem e de destino: (marquei as colunas de chaves compostas com um asterik)
Isso funciona porque a união retorna implicitamente registros distintos. Portanto, para qualquer linha (identificada por alguma chave) na fonte que você espera corresponder exatamente no destino, você esperaria que uma união do src e do destino retornasse 1 linha para qualquer chave. Portanto, você pode usar a estratégia acima para descobrir quais chaves retornam um resultado de união com várias linhas e, em seguida, consultar o destino da união src novamente (desta vez, apenas selecionando os registros com diferenças, juntando-se à tabela diff), selecionando todas as colunas que você deseja compare, ordenando pelas colunas que compõem a chave e você verá exatamente quais colunas são incompatíveis. Observe que os nomes das colunas na origem e no destino não precisam corresponder, pois podem ser alternados entre si usando uma instrução "as".
fonte
Para encontrar as diferenças entre duas tabelas idênticas
SELECT *
FROM SOURCE01.dbo.Customers
UNION
SELECT *
FROM TARGET01.dbo.Customers
EXCEPT
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
FROM TARGET01.dbo.Customers
A ordem das operações faz com que o INTERSECT seja executado primeiro, fornecendo um conjunto de dados com apenas as linhas existentes nas duas tabelas. Segundo, o UNION é executado, fornecendo todas as linhas de ambas as tabelas sem duplicatas. Finalmente, é executado o EXCEPT, que exclui do UNION (todas as linhas de ambas as tabelas) o conjunto de dados INTERSECT, que são as linhas das duas tabelas. Isso deixa você com um conjunto de dados que contém apenas as linhas que existem em uma das tabelas, mas não na outra. Se o seu conjunto de dados voltar vazio, todas as linhas serão iguais entre as tabelas.
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
fonte
Eu tive um problema semelhante e usei o comando SQL 'EXCEPT' para resolver o problema. O comando EXCEPT utiliza duas instruções SELECT e retorna as linhas retornadas pela primeira instrução SELECT (esquerda) e não pela segunda instrução SELECT (direita).
PS: O esquema para as duas tabelas retornadas pela instrução SELECT deve corresponder.
Para mais clareza, visite: Página de Tutoriais aqui
fonte
O script (quando fornecido com os detalhes relevantes) compara 2 tabelas (diga Clientes no servidor1 a Clientes no Servidor2).
Esse script será útil se você estiver comparando uma tabela com muitas colunas, mas se esforçar para encontrar a coluna incompatível exata.
Eu tenho uma tabela com 353 colunas e tive que compará-la com outra tabela e encontrar valores que não correspondiam e esse script ajudará a localizar a tupla exata.
fonte
Eu acho que você deve tentar o xSQL Data Compare , que fará o truque no seu caso. Digamos, por exemplo, que você especifique
Depois de comparar as tabelas, no resultado da comparação, é possível especificar que você deseja sincronizar apenas as diferenças da tabela esquerda que produziriam um script SQL para inserir no TARGET01.dbo.Customers todas as linhas que não estão nesta tabela, mas existe em SOURCE01.dbo.Customers (alcançando um resultado UNION sem duplicatas). Espero que isto ajude!
Divulgação: sou afiliado ao xSQL.
fonte