Como comparar duas Bases de Dados com o Visual Studio

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…:

Opção New Data Comparison no Visual Studio

Isso irá te abrir a seguinte janela:

Selecionar as conexões para comparar duas bases de dados

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:

Configurar conexão com a Base de Dados

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:

Registos diferentes entre as tabelas

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:

SQL Except entre duas tabelas

E é isso, espero que tenha ajudado. E vocês, já conheciam essa opção do Visual Studio? Utilizam outra forma? Deixem nos comentários.

Posted in Bases de Dados, Dicas

Write a comment

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.