Já te deparaste com a necessidade de comparar duas bases de dados? Pois eu já.
Dado a um trabalho que tinha que realizar, onde melhorei a performance de um processo em mais de 12000%, deparei-me com uma situação em que tinha que comparar os dados de algumas tabelas entre Bases de Dados diferentes mas com a mesma estrutura.
Já sabia que o Visual Studio é uma ferramenta incrível para se trabalhar, mas confesso que desconhecia a funcionalidade dele em comparar duas Bases de Dados de forma tão fácil.
Para isso basta, no menu, ir em Tools -> no sub menu SQL Server -> New Data Comparison…:
Isso irá te abrir a seguinte janela:
Posto isso basta configurar as conexões a ambas as Bases de Dados, o que também é muito simples.
Ao clicarmos em Select Connection nos deparamos com:
Basta ir a Browse e depois configurar os dados ao nosso servidor SQL Server.
Para o exemplo, imaginemos o seguinte script sql:
CREATE DATABASE SourceDb GO USE SourceDb GO CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) ); GO INSERT INTO Persons VALUES(1,'Gonçalves', 'Carlos', 33) INSERT INTO Persons VALUES(2,'Gonçalves', 'Rodrigo', 2) GO CREATE DATABASE DestinationDb GO USE DestinationDb GO CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) ); GO INSERT INTO Persons VALUES(1,'Gonçalves', 'Carlos', 33) INSERT INTO Persons VALUES(2,'Gonçalves', 'Rodrigo', 1)
O que deveríamos esperar era que, ao comparar duas Bases de Dados, no caso a tabela Persons da Base de Dados DestinationDb com a tabela Persons da Base de Dados SourceDb era que a primeira entrada seja 100% igual e que a segunda difira na idade, em que na SourceDb o Rodrigo tem 2 anos mas na DestinationDb ele está com 1 ano.
Vejamos então:
Bem como podemos confirmar que existe 1 Identical Record que no caso seria a primeira entrada:
Uma forma simples também para isso poderia ser:
SELECT * FROM SourceDb.[dbo].Persons EXCEPT SELECT * FROM DestinationDb.[dbo].Persons
Que nos daria o resultado:
E é isso, espero que tenha ajudado. E vocês, já conheciam essa opção do Visual Studio? Utilizam outra forma? Deixem nos comentários.