Olá pessoas!
Recentemente, encontrei um script bem interessante para realizar o CHECKSUM de todos os dados de todas as colunas de uma tabela, fiz algumas alterações mínimas para reduzir o código do script original, e ficou desta forma:
DECLARE @schema_name sysname
SET @schema_name = 'dbo'
DECLARE @table_name sysname
SET @table_name = 'Nome da tabela'
DECLARE @column_list VARCHAR(MAX)
SELECT @column_list =
COALESCE(@column_list + ', ', '') + QUOTENAME(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
AND TABLE_SCHEMA = @schema_name
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT CHECKSUM_AGG(CHECKSUM({@column_list})) FROM [{@schema_name}].[{@table_name}]'
SET @sql = REPLACE(@sql, '{@column_list}', @column_list)
SET @sql = REPLACE(@sql, '{@schema_name}', @schema_name)
SET @sql = REPLACE(@sql, '{@table_name}', @table_name)
EXEC (@sql)
Esta consulta retorna o CHECKSUM de todos os dados da tabela de forma rápida (na maioria das vezes), e permite verificar por meio deste CHECKSUM se a tabela foi ou não alterada, sendo uma ótima alternativa comparar alterações em tabelas similares em bancos distintos e criar uma estrutura simples de versionamento.
A única limitação que encontrei para este script é a necessidade de um tratamento diferenciado para colunas XML:
Msg 8116, Level 16, State 4, Line 1
Argument data type xml is invalid for argument X of checksum function.
Referências
Script original:
http://stackoverflow.com/questions/1560306/calculate-hash-or-checksum-for-a-table-in-sql-server
Função CHECKSUM:
http://msdn.microsoft.com/en-us/library/ms189788.aspx
Função CHECKSUM_AGG:
http://msdn.microsoft.com/en-us/library/ms188920.aspx
Artigos relacionados:
Comparando a estrutura de tabelas diferentes
http://sqlfromhell.wordpress.com/2010/01/09/query-from-hell-comparando-a-estrutura-de-tabelas-diferentes/
Red Gate – Overview – SQL Data Compare
http://sqlfromhell.wordpress.com/2011/05/23/red-gate-overview-sql-data-compare/
Visual Studio 2010 – Data Compare
http://sqlfromhell.wordpress.com/2011/01/27/visual-studio-2010-data-compare/
0 Respostas para “Verificar a versão dos dados de uma tabela por CHECKSUM”