CHECKSUM (Transact-SQL)

Retorna o valor da soma de verificação calculado em uma linha de uma tabela ou em uma lista de expressões. CHECKSUM foi desenvolvido para ser usado na criação de índices de hash.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

CHECKSUM ( * | expression [ ,...n ] )

Argumentos

  • *
    Especifica que o cálculo é feito em todas as colunas da tabela. CHECKSUM retorna um erro se alguma coluna for do tipo de dados não comparável. Os tipos de dados não comparáveis são text, ntext, image, XML e cursor e também sql_variant com qualquer um dos tipos anteriores como tipo base.

  • expression
    É uma expressão de qualquer tipo, com exceção de um tipo de dados não comparável.

Tipos de retorno

int

Comentários

CHECKSUM calcula um valor de hash, chamado de soma de verificação, em sua lista de argumentos. O valor de hash deve ser usado na criação de índices de hash. Se os argumentos de CHECKSUM forem colunas e um índice for criado no valor de CHECKSUM calculado, o resultado será um índice de hash. Isso pode ser usado para pesquisas de igualdade em colunas.

CHECKSUM satisfaz as propriedades de uma função de hash: CHECKSUM aplicado em quaisquer duas listas de expressões retorna o mesmo valor se os elementos correspondentes das duas listas tiverem o mesmo tipo e forem iguais quando comparados com o operador de igualdade (=). Para essa definição, os valores nulos de um tipo especificado são considerados para serem comparados como iguais. Se um dos valores da lista de expressão for alterado, em geral, a soma de verificação da lista também será alterada. Entretanto, há uma pequena chance de que a soma de verificação não seja alterada. Por esse motivo, não recomendamos o uso de CHECKSUM para detectar se os valores foram alterados, a não ser que o aplicativo ofereça suporte, ocasionalmente, para a ausência de uma alteração. Avalie a possibilidade de usar HashBytes. Quando um algoritmo de hash MD5 é especificado, a probabilidade de HashBytes retornar o mesmo resultado para duas entradas diferentes é muito maior que o do retorno de CHECKSUM.

A ordem das expressões afeta o valor resultante de CHECKSUM. A ordem das colunas usada com CHECKSUM(*) é a mesma especificada na tabela ou definição de exibição. Isso inclui as colunas computadas.

O valor CHECKSUM depende do agrupamento. O mesmo valor armazenado com um agrupamento diferente retornará um valor de CHECKSUM diferente.

Exemplos

Os exemplos a seguir mostram como usar CHECKSUM para criar índices de hash. O índice de hash é criado adicionando-se uma coluna de soma de verificação calculada à tabela que está sendo indexada e, em seguida, criando um índice na coluna de soma de verificação.

-- Create a checksum index.
SET ARITHABORT ON;
USE AdventureWorks2008R2; 
GO
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO

O índice de soma de verificação pode ser usado como um índice de hash, especialmente para melhorar a velocidade de indexação quando a coluna a ser indexada é uma coluna de caracteres longa. O índice de soma de verificação pode ser usado para pesquisas de igualdade.

/*Use the index in a SELECT query. Add a second search 
condition to catch stray cases where checksums match, 
but the values are not the same.*/
SELECT * 
FROM Production.Product
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname
AND Name = N'Bearing Ball';
GO

A criação do índice na coluna computada materializa a coluna de soma de verificação e todas as alterações no valor de ProductName serão propagados na coluna de soma de verificação. Opcionalmente, um índice pode ser criado diretamente na coluna indexada. No entanto, se os valores de chave forem longos, um índice normal provavelmente não será executado, assim como um índice de soma de verificação.