CHECKSUM (Transact-SQL)

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

Applies to: Serveur SQL (toutes les versions prises en charge) Base de données SQL Azure Instance gérée SQL Azure Analyse de Synapse Azure

Le renvoie la valeur de somme de contrôle calculée sur une ligne de table ou sur une liste d’expressions. Utilisez CHECKSUM pour créer des index de hachage.

Conventions de syntaxe Transact-SQL

Syntaxe

CHECKSUM ( * | expression ) 

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez la documentation des versions précédentes.

Remarque

Cette syntaxe n’est pas prise en charge par le pool SQL sans serveur dans Azure Synapse Analytics.

Arguments

*
Cet argument spécifie que le calcul de la somme de contrôle couvre toutes les colonnes de la table. CHECKSUM renvoie une erreur si une colonne a un type de données non comparable. Les types de données non comparables incluent:

  • curseur
  • image
  • ntext
  • text
  • XML

Un autre type de données non comparable est sql_variant avec l’un des types de données précédents comme type de base.

expression
Expression de tout type, à l’exception d’un type de données non comparable.

Types de retour

int

Remarques

CHECKSUM calcule une valeur de hachage, appelée somme de contrôle, sur sa liste d’arguments. Utilisez cette valeur de hachage pour créer des index de hachage. Un index de hachage se produira si la fonction CHECKSUM a des arguments de colonne et qu’un index est construit sur la valeur CHECKSUM calculée. Cela peut être utilisé pour des recherches d’égalité sur les colonnes.

La fonction CHECKSUM satisfait les propriétés de la fonction de hachage : CHECKSUM appliquée sur deux listes d’expressions quelconques renverra la même valeur, si les éléments correspondants des deux listes ont le même type de données, et si ces éléments correspondants ont une égalité lorsqu’ils sont comparés à l’aide de l’opérateur equals(=). Les valeurs nulles d’un type spécifié sont définies pour être comparées comme égales à des fins de fonction CHECKSUM. Si au moins une des valeurs de la liste d’expressions change, la somme de contrôle de la liste changera probablement. Cependant, cela n’est pas garanti.Par conséquent, pour détecter si les valeurs ont changé, nous vous recommandons d’utiliser CHECKSUM uniquement si votre application peut tolérer un changement manqué occasionnel. Sinon, envisagez d’utiliser HASHBYTES à la place. Avec un algorithme de hachage MD5 spécifié, la probabilité que HASHBYTES renvoie le même résultat, pour deux entrées différentes, est beaucoup plus faible par rapport à CHECKSUM.

L’ordre d’expression affecte la valeur CHECKSUM calculée. L’ordre des colonnes utilisé pour CHECKSUM(*) est l’ordre des colonnes spécifié dans la définition de la table ou de la vue. Cela inclut les colonnes calculées.

La valeur CHECKSUM dépend du classement. La même valeur stockée avec un classement différent renverra une valeur CHECKSUM différente.

CHECKSUM ()ne garantit pas des résultats uniques.

Exemples

Ces exemples montrent l’utilisation de CHECKSUM pour construire des index de hachage.

Pour construire l’index de hachage, le premier exemple ajoute une colonne de somme de contrôle calculée à la table que nous voulons indexer. Il construit ensuite un index sur la colonne de somme de contrôle.

-- 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 

Cet exemple montre l’utilisation d’un index de somme de contrôle comme index de hachage. Cela peut aider à améliorer la vitesse d’indexation lorsque la colonne à indexer est une colonne de caractères longs. L’index de somme de contrôle peut être utilisé pour les recherches d’égalité.

/*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 

La création d’index sur la colonne calculée matérialise la colonne de somme de contrôle, et toute modification de la valeur ProductName se propagera à la colonne de somme de contrôle. Alternativement, nous pourrions construire un index directement sur la colonne que nous voulons indexer. Cependant, pour les valeurs de clés longues, un index régulier ne fonctionnera probablement pas aussi bien qu’un index de somme de contrôle.

See also

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.