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)