CHECKSUM (Transact-SQL)
Retourne la valeur de la somme de contrôle calculée sur une ligne d'une table ou sur une liste d'expressions. CHECKSUM est destiné à être utilisé dans la création d'index de hachage.
Conventions de la syntaxe Transact-SQL
Syntaxe
CHECKSUM ( * | expression [ ,...n ] )
Arguments
*
Spécifie que le calcul concerne toutes les colonnes de la table. CHECKSUM retourne une erreur si une colonne est d'un type de données non comparable. Les types de données non comparables sont text, ntext, image, XML et cursor, ainsi que sql_variant lorsque ce dernier utilise comme type de base l'un des types énumérés ci-dessus.expression
Expression de type quelconque, à l'exception d'un type de données non comparable.
Types de retour
int
Notes
CHECKSUM calcule une valeur de hachage, appelée somme de contrôle, sur sa liste d'arguments. La valeur de hachage est destinée à être utilisée dans la création d'index de hachage. Si les arguments de CHECKSUM sont des colonnes et qu'un index est créé sur la valeur CHECKSUM calculée, le résultat est un index de hachage qui peut être utilisé dans des recherches d'égalité sur les colonnes.
CHECKSUM a les propriétés d'une fonction de hachage : lorsque CHECKSUM est appliqué à deux listes d'expressions, la même valeur est retournée si les éléments correspondants dans les deux listes sont du même type et ont une valeur égale lorsqu'ils sont comparés à l'aide de l'opérateur d'égalité (=). Pour cette définition, les valeurs NULL d'un type spécifié sont considérées comme ayant une valeur de comparaison égale. Si l'une des valeurs de la liste d'expressions change, en général, la somme de contrôle de la liste change également. Il existe toutefois une faible probabilité pour que la somme de contrôle ne change pas. Pour cette raison, nous déconseillons d'utiliser CHECKSUM pour vérifier si des valeurs ont changé, à moins que votre application accepte de manquer parfois une modification. Pensez à utiliser HashBytes à la place. Lorsqu'un algorithme de hachage MD5 est spécifié, la probabilité que HashBytes retourne le même résultat pour deux entrées différentes est beaucoup plus faible que pour CHECKSUM.
L'ordre des expressions affecte la valeur du résultat de CHECKSUM. L'ordre des colonnes utilisé avec CHECKSUM (*) est celui spécifié dans la définition de la table ou de la vue, y compris les colonnes calculées.
La valeur de CHECKSUM dépend du classement. La même valeur stockée avec un autre classement retourne une valeur CHECKSUM différente.
Exemples
Les exemples suivants illustrent l'utilisation de CHECKSUM pour créer des index de hachage. L'index de hachage est créé en ajoutant une colonne de somme de contrôle calculée à la table à indexer, puis en générant un index sur la colonne de la 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
L'index de la somme de contrôle peut être utilisé comme un index de hachage, notamment pour améliorer la vitesse d'indexation lorsque la colonne à indexer est une colonne contenant des chaînes de caractères longues. L'index de la somme de contrôle peut être utilisé dans 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 de l'index dans une colonne calculée matérialise la colonne de la somme de contrôle, et toutes les modifications apportées à la valeur ProductName sont propagées à cette colonne. Un index peut aussi être créé directement sur la colonne indexée. Toutefois, lorsque les valeurs de clé sont longues, un index normal n'est probablement pas aussi performant qu'un index de somme de contrôle.