quais são as diferenças entre CHECKSUM() e BINARY_CHECKSUM() e quando/quais são os cenários de Utilização adequados?
confira o seguinte post no blog que destaca as diferenças.
CHECKSUM Functions in SQL Server 2005
adicionar informação a partir desta ligação:
a principal intenção das funções de CHECKSUM é criar um índice de hash baseado numa expressão ou numa lista de colunas. Se você disser que você o usa para computar e armazenar uma coluna no nível da tabela para denotar o checksum sobre as colunas que fazem um registro único em uma tabela, então isso pode ser útil para determinar se uma linha mudou ou não. Este mecanismo pode então ser usado em vez de juntar com todas as colunas que fazem o registro único para ver se o registro foi atualizado ou não. O SQL Server Books Online tem um monte de exemplos nesta peça de funcionalidade.
um par de coisas para ter cuidado ao usar estas funções:
você precisa se certificar de que a(s) coluna (s) ou ordem de expressão é a mesma entre os dois códigos de validação que estão sendo comparados caso contrário o valor seria diferente e levará a problemas.
não recomendamos o uso de checksum (*) uma vez que o valor que será gerado dessa forma será baseado na ordem de colunas da definição da tabela em tempo de execução que pode facilmente mudar ao longo de um período de tempo. Então, defina explicitamente a lista de colunas.
tenha cuidado quando você incluir as colunas do tipo de dados datetime, uma vez que a granularidade é 1/300th de um segundo e até mesmo uma pequena variação resultará em um valor de checksum diferente. Então, se você tiver que usar uma coluna do tipo de dados datetime, então certifique-se de obter a data exata + hora/min. ou seja, o nível de granularidade que você quer.
existem três funções de checksum disponíveis para você:
CHECKSUM: isto foi descrito acima.
CHECKSUM_ AGG: isto devolve o valor dos valores num grupo e os valores nulos são ignorados neste caso. Isto também funciona com a nova cláusula de OVER da função analítica no servidor SQL 2005.
BINARY_CHECKSUM: como o nome indica, isto devolve o valor binário do código de validaçã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 de tal diferença é que os valores gerados para “decifrar” e “decifrar” serão diferentes no caso de um BINARY_CHECKSUM, mas serão os mesmos para a função de CHECKSUM (assumindo que temos uma instalação sem capitalização da instância). Outra diferença é a comparação de expressões. O BINARY_ checksum () devolve o mesmo valor se os elementos de duas expressões tiverem o mesmo tipo e representação de ‘bytes’. Assim, “2Volvo Director 20” e “3Volvo Director 30” produzirão o mesmo valor, no entanto a função CHECKSUM() avalia o tipo, bem como compara as duas cadeias de caracteres e, se forem iguais, então apenas o mesmo valor é devolvido.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363