Partage via


BINARY_CHECKSUM (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPoint de terminaison d’analytique SQL dans Microsoft FabricEntrepôt dans Microsoft FabricBase de données SQL 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 non comparables dans son calcul. Les types de données non comparables incluent :

  • cursor
  • image
  • ntext
  • text
  • xml
  • types définis par l’utilisateur par l’utilisateur en temps d’exécution du langage commun (CLR) non comparables

expression

Expression de tout type. BINARY_CHECKSUM ignore les expressions de types de données non comparables 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 satisfait les propriétés d’une fonction de hachage : lorsqu’elle est appliquée sur deux listes d’expressions quelconque, elle retourne la même valeur si les éléments correspondants des deux listes ont le même type et sont égaux lorsqu’ils sont comparés à l’aide de l’opérateur égal (=).

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, ce changement n’est pas garanti, et pour détecter si les valeurs ont changé, vous devez utiliser BINARY_CHECKSUM uniquement si votre application peut tolérer un changement occasionnel manqué. Sinon, envisagez d’utiliser HASHBYTES à la place. Avec un algorithme de hachage MD5 spécifié, la probabilité de HASHBYTES restituer le même résultat, pour deux entrées différentes, est bien inférieure à 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
  • sql_variant (si le type de base de sql_variant est un type de données chaîne)

Par exemple, les chaînes McCavity et Mccavity ont des valeurs différentes BINARY_CHECKSUM . À 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_CHECKSUMPrend en charge toute longueur de type varbinary(max), et jusqu’à 255 caractères de type nvarchar(n) / 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