CHECKSUM (Transact-SQL)

  • 07/24/2017
  • 3 minutes to read
    • c
    • r
    • M
    • i
    • M
    • +6

Applies to: SQL Server (todas as versões) Azure SQL Database Azure SQL Instância Gerenciada Azure Sinapse Analytics

CHECKSUM função retorna o valor de soma de verificação calculada através de uma linha da tabela, ou mais de uma lista de expressão. Use CHECKSUM para criar índices de hash.

Sintaxe Transact-SQL Convenções

Sintaxe

CHECKSUM ( * | expression ) 

Nota

Para exibir a sintaxe Transact-SQL para o SQL Server 2014 e versões anteriores, consulte versões Anteriores de documentação.

Nota

esta sintaxe não é suportada pelo conjunto SQL serverless na análise de sinapse Azure.

argumentos

*
Este argumento especifica que o cálculo do código de validação cobre todas as colunas da tabela. CHECKSUM devolve um erro se qualquer coluna tiver um tipo de dados não comparável. Os tipos de dados não comparáveis incluem:

  • cursor
  • imagem
  • ntext
  • texto
  • XML

Outro noncomparable tipo de dados sql_variant com qualquer um dos anteriores tipos de dados como tipo base.

expression
an expression of any type, except a noncomparable data type.

Return types

int

Remarks

CHECKSUM computes a hash value, called the checksum, over its argument list. Use este valor de hash para criar índices de hash. Um índice de hash irá resultar se a função CHECKSUMtem argumentos em coluna, e um índice é construído sobre o valor calculadoCHECKSUM valor. Isto pode ser usado para pesquisas de igualdade nas colunas.

CHECKSUM função satisfaz a função de hash propriedades: CHECKSUM aplicada através de quaisquer duas listas de expressões retornará o mesmo valor, se os elementos correspondentes das duas listas têm o mesmo tipo de dados, e se os elementos correspondentes de ter igualdade quando comparada com a de igual (=) operador. Os valores nulos de um tipo especificado são definidos para comparar como iguais para CHECKSUM funções propósitos. Se pelo menos um dos valores da lista de expressões mudar, o checksum da lista provavelmente irá mudar. No entanto, isso não está garantido.Portanto, para detectar se os valores mudaram, recomendamos o uso de CHECKSUM apenas se a sua aplicação puder tolerar uma alteração ocasional. Caso contrário, considere usar HASHBYTES em vez disso. Com um determinado algoritmo de hash MD5, a probabilidade de que HASHBYTES irá retornar o mesmo resultado, para duas entradas diferentes, é muito menor se comparado com CHECKSUM.

A ordem de expressão afeta o valor calculado CHECKSUM. A ordem das colunas usada para CHECKSUM(*) é a ordem das colunas especificadas na definição da tabela ou vista. Isto inclui colunas computadas.

o valor CHECKSUM depende da colação. O mesmo valor armazenado com uma colação diferente irá retornar um valor diferente CHECKSUM.

CHECKSUM () não garante resultados únicos.

Exemplos

Estes exemplos mostram o uso de CHECKSUM para criar índices hash.

para compilar o índice de hash, o primeiro exemplo adiciona uma coluna de códigos de validação computados à tabela que queremos indexar. Ele então constrói um índice na coluna de checksum.

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

este exemplo mostra o uso de um índice de checksum como um índice de hash. Isto pode ajudar a melhorar a velocidade de indexação quando a coluna a indexar é uma coluna de caracteres longos. O índice de códigos de validaçã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 

Index creation on the computed column materializes the checksum column, and any changes to the ProductName value will propagate to the checksum column. Alternativamente, podemos construir um índice diretamente na coluna que queremos indexar. No entanto, para os valores-chave longos, um índice regular provavelmente não irá executar bem como um índice de checksum.

See also

CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)

Deixe uma resposta

O seu endereço de email não será publicado.