Estou no processo de instalação de aplicativos e bancos de dados.
Para verificar se um arquivo está correto, posso simplesmente fazer a soma de verificação.
Existe uma maneira de verificar se uma tabela está correta? (Percebo que posso colocar a tabela inteira em um arquivo e obter a soma de verificação desse arquivo, mas talvez haja uma maneira mais simples.)
Existem várias maneiras e ferramentas disponíveis para fazer uma comparação de banco de dados. Minha preferência é a ferramenta SQL Examiner Suite . É simples, poderoso, relativamente barato e você pode dizer as diferenças de esquema e diferenças de dados. É flexível nas opções avançadas, permitindo que você ignore coisas diferentes durante a comparação, como diferenças de agrupamento, padrões, restrições de verificação, etc. E pode comparar bancos de dados no mesmo servidor ou em servidores diferentes.
Além disso, aqui está uma lista abrangente de ferramentas para comparação de banco de dados, do MSSQLTips.
Se você se preocupa principalmente com as diferenças de dados, não tem muitas tabelas para comparar e não quer gastar dinheiro em uma ferramenta, provavelmente pode lançar sua própria solução usando algo como as funções
HASHBYTES()
ouCHECKSUM()
. Eu prefiroHASHBYTES()
por sua maior precisão .Aproveitando uma das funções citadas, a ideia seria criar um único hash por linha (da concatenação de cada coluna da tabela), e fazer um
FULL JOIN
nos hashes entre as duas instâncias da tabela, filtrando onde está a chave de cada lado nulo. Isso deixaria você apenas com as linhas que são diferentes.Como você deseja implementar a função de hash é sua chamada. Se for uma comparação única, você pode fazer isso rapidamente (embora a junção possa ser lenta). Se for uma coisa recorrente, você pode adicioná-la como uma coluna à própria tabela ou criar uma exibição na parte superior da tabela com ela como uma coluna, se puder alterar o esquema. Isso permitiria que você criasse um índice sobre o resultado da função (
HASHBYTES()
é determinístico, não tenho tanta certezaCHECKSUM()
), para melhor desempenho durante a comparação.A limitação desse método é que ambas as tabelas precisam estar acessíveis para serem unidas, seja tendo os dois bancos de dados no mesmo servidor ou aproveitando algo como um Linked Server para acessar o servidor do outro banco de dados, o que potencialmente pode ser lento por muito De dados.