Usando o Utilitário TableDiff

Publicado: 20 de maio de 2009 em SQL Server
Tags:
Olá pessoal, hoje vou falar sobre uma feature que está disponível a partir do SQL Server 2005, o Tablediff.

Ele é usado para comparar dados entre tabelas, geralmente, quando possuimos sistemas com replicação e se faz necessário verificar a diferença de dados entre duas tabelas iguais. Podendo realizar a comparação linha a linha ou apenas de colunas.

Para o exemplo vamos criar duas tabelas iguais e inserir alguns valores:

create database DB_TABLEDIFF
GO
 create table TB_A(ID int primary key, NOME char(1))
create table TB_B(ID int primary key, NOME char(1))
GO

–populando a tabela A
insert into TB_A(ID, NOME)select 1, ‘A’
insert into TB_A(ID, NOME)select 2, ‘B’
insert into TB_A(ID, NOME)select 3, ‘C’

–populando a tabela B
insert into TB_B(ID, NOME)select 7, ‘C’

–verificando os dados da tabela A
select * from TB_A

–verificando os dados da tabela B
select * from TB_B

Notem que a tabela a possui 3 registros e nenhum deles está na tabela b e a tabela b possui 1 registro que não está na tabela a. Iremos executar o comando utilitário TableDiff  para comparar as duas tabelas e o mesmo vai gerar um arquivo com o script para deixar as duas tabelas idênticas, ou seja, a tabela b vai ficar igual à tabela a. Destination = Source.

Crie um arquivo .bat com o seguinte conteúdo( verifique onde se encontra seu tablediff.exe ). Ajuste os parâmetros abaixo conforme suas instâncias e databases( para este exemplo só é necessário informar o nome do seu servidor ).

cd\
md diff
cd arquivos de programas
cd microsoft sql server
cd 100
cd com
copy tablediff.exe c:\diff

cd diff
tablediff/?

tablediff -sourceserver [nomeServidorOrigem] -sourcedatabase db_tablediff -sourcetable
tb_a -destinationserver [nomeServidorDestino] -destinationdatabase db_tablediff -destinationtable tb_b  -f c:\Diff

pause

Salve o arquivo .bat onde desejar.

Execute o script e o mesmo vai gerar um arquivo Diff.sql no c:\ com o seguinte conteúdo:
— Host: nomeServidorOrigem
— Database: [db_tablediff]
— Table: [dbo].[tb_b]
INSERT INTO [dbo].[tb_b] ([ID],[NOME]) VALUES (1,N’A’)
INSERT INTO [dbo].[tb_b] ([ID],[NOME]) VALUES (2,N’B’)
INSERT INTO [dbo].[tb_b] ([ID],[NOME]) VALUES (3,N’C’)
DELETE FROM [dbo].[tb_b] WHERE [ID] = 7

Copie o conteúdo do arquivo gerado e execute no banco de dados onde está a tabela b ( no nosso caso db_tablediff ).

–verificando os dados da tabela A
select * from TB_A

–verificando os dados da tabela B
select * from TB_B

Agora sim, as tabelas estão idênticas.

Abraços

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s