BINARY_CHECKSUM (Transact-SQL)
S’applique à : SQL Server base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Point de terminaison analytique SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric
Retourne la valeur de total de contrôle binaire calculée à partir d'une ligne d'une table ou d'une liste d'expressions.
Conventions de la syntaxe Transact-SQL
Syntaxe
BINARY_CHECKSUM ( * | expression [ ,...n ] )
Notes
Cette syntaxe n’est pas prise en charge par le pool SQL serverless dans Azure Synapse Analytics.
Arguments
*
Indique que le calcul englobe toutes les colonnes de la table. BINARY_CHECKSUM ignore les colonnes de types de données incomparables dans son calcul. Les types de données incomparables sont notamment
- cursor
- image
- ntext
- text
- xml
et les types définis par l’utilisateur CLR (Common Language Runtime) incomparables.
expression
Expression de tout type. BINARY_CHECKSUM ignore les expressions de types de données incomparables dans son calcul.
Types de retour
int
Notes
BINARY_CHECKSUM(*)
, calculé sur n’importe quelle ligne d’une table, retourne la même valeur tant que la ligne n’est pas modifiée. BINARY_CHECKSUM
a les propriétés d'une fonction de hachage : lorsque c’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, nous disons que les valeurs NULL d’un type spécifié apparaissent comme étant équivalentes. Si au moins l’une des valeurs de la liste d’expressions change, la somme de contrôle des expressions peut également changer. Cependant, cette modification n’est pas garantie. Nous conseillons donc d’utiliser BINARY_CHECKSUM
pour vérifier si des valeurs ont changé, uniquement si votre application peut accepter une modification parfois manquée. Sinon, envisagez d’utiliser HASHBYTES
à la place. Avec un algorithme de hachage MD5 spécifié, la probabilité que HASHBYTES
retourne le même résultat pour deux entrées différentes est beaucoup plus faible qu’avec BINARY_CHECKSUM
.
BINARY_CHECKSUM
peut opérer sur une liste d’expressions et retourne la même valeur pour une liste spécifiée. Lorsque la fonction BINARY_CHECKSUM
porte sur deux listes d'expressions, elle retourne la même valeur si les éléments correspondants des deux listes sont de type et de représentation en octets identiques. Pour cette définition, les valeurs NULL d'un type spécifié sont considérées comme utilisant la même représentation en octets.
BINARY_CHECKSUM
et CHECKSUM
sont des fonctions similaires. elles peuvent être utilisées pour calculer une somme de contrôle dans une liste d'expressions, et l'ordre des expressions affecte la valeur résultante. L’ordre des colonnes utilisé pour BINARY_CHECKSUM(*)
est celui spécifié dans la définition de la table ou de la vue, y compris les colonnes calculées.
BINARY_CHECKSUM
et CHECKSUM
retournent des valeurs différentes pour les types de données de chaîne. Avec les paramètres régionaux, des chaînes dont la représentation est différente peuvent apparaître comme étant équivalentes. Les types de données de chaîne sont
- char
- nchar
- nvarchar
- varchar
ou
- sql_variant (si le type de base de sql_variant est un type de données de chaîne).
Par exemple, les valeurs BINARY_CHECKSUM
des chaînes « McCavity » et « Mccavity » sont différentes. À l’inverse, CHECKSUM
retourne les mêmes valeurs de somme de contrôle pour ces chaînes sur un serveur qui ne respecte pas la casse. Vous devez éviter de comparer les valeurs de CHECKSUM
avec les valeurs de BINARY_CHECKSUM
.
BINARY_CHECKSUM
prend en charge n’importe quelle longueur de type varbinary(max) et jusqu’à 255 caractères de type nvarchar(max).
Exemples
Cet exemple utilise BINARY_CHECKSUM
pour détecter des modifications dans une ligne d’une table.
USE AdventureWorks2022;
GO
CREATE TABLE myTable (column1 INT, column2 VARCHAR(256));
GO
INSERT INTO myTable VALUES (1, 'test');
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
UPDATE myTable set column2 = 'TEST';
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
Voir aussi
Fonctions d'agrégation (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
CHECKSUM (Transact-SQL)
HASHBYTES (Transact-SQL)