Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Quais são as diferenças entre CHECKSUM() e BINARY_CHECKSUM() e quando/quais são os cenários de uso apropriados?


Confira o seguinte post do blog que destaca as diferenças.

http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

Adicionando informações deste link:

A principal intenção das funções CHECKSUM é construir um índice de hash com base em uma expressão ou uma lista de colunas. Se você usá-lo para calcular e armazenar uma coluna no nível da tabela para denotar a soma de verificação sobre as colunas que tornam um registro exclusivo em uma tabela, isso pode ser útil para determinar se uma linha foi alterada ou não. Esse mecanismo pode ser usado em vez de unir todas as colunas que tornam o registro exclusivo para ver se o registro foi atualizado ou não. Os Manuais Online do SQL Server têm muitos exemplos dessa funcionalidade.

Algumas coisas a serem observadas ao usar essas funções:

Você precisa ter certeza de que a(s) coluna(s) ou ordem de expressão é a mesma entre as duas somas de verificação que estão sendo comparadas, caso contrário o valor seria diferente e levaria a problemas.

Não recomendamos o uso de checksum(*), pois o valor que será gerado dessa maneira será baseado na ordem das colunas da definição da tabela em tempo de execução, que pode mudar facilmente ao longo de um período de tempo. Portanto, defina explicitamente a listagem de colunas.

Tenha cuidado ao incluir as colunas de tipo de dados datetime, pois a granularidade é de 1/300 de segundo e mesmo uma pequena variação resultará em um valor de checksum diferente. Portanto, se você precisar usar uma coluna do tipo de dados datetime, certifique-se de obter a data exata + hora/min. ou seja, o nível de granularidade que você deseja.

Existem três funções de checksum disponíveis para você:

CHECKSUM:Isso foi descrito acima.

CHECKSUM_AGG:Retorna a soma de verificação dos valores em um grupo e os valores Nulos são ignorados neste caso. Isso também funciona com a cláusula OVER da nova função analítica no SQL Server 2005.

BINARY_CHECKSUM:como o nome indica, retorna o valor binário da soma de verificação calculado sobre uma linha ou uma lista de expressões. A diferença entre CHECKSUM e BINARY_CHECKSUM está no valor gerado para os tipos de dados de string. Um exemplo dessa diferença é que os valores gerados para “DECIPHER” e “decipher” serão diferentes no caso de um BINARY_CHECKSUM mas serão os mesmos para a função CHECKSUM (assumindo que temos uma instalação que não diferencia maiúsculas de minúsculas da instância). Outra diferença está na comparação de expressões. BINARY_CHECKSUM() retorna o mesmo valor se os elementos de duas expressões tiverem o mesmo tipo e representação de bytes. Portanto, “2Volvo Director 20” e “3Volvo Director 30” produzirão o mesmo valor, porém a função CHECKSUM() avalia o tipo e compara as duas strings e, se forem iguais, apenas o mesmo valor é retornado.
Example:
STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
------------------- ----------------------    -----------
2Volvo Director 20  -1356512636                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363