BINARY_CHECKSUM (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysendpoint i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Returnerar det binära kontrollsummevärdet beräknat över en rad i en tabell eller över en lista med uttryck.

Transact-SQL syntaxkonventioner

Syntax

BINARY_CHECKSUM ( * | expression [ , ...n ] )

Anmärkning

Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Arguments

*

Specificerar att beräkningen täcker alla tabellkolumner. BINARY_CHECKSUM ignorerar kolumner med icke-jämförbara datatyper i sin beräkning. Icke-jämförbara datatyper inkluderar:

  • markören
  • image
  • ntext
  • text
  • xml
  • icke-jämförbara Common Language Runtime (CLR) användardefinierade typer

uttryck

Ett uttryck av valfri typ. BINARY_CHECKSUM ignorerar uttryck av icke-jämförbara datatyper i sin beräkning.

Returtyper

int

Anmärkningar

BINARY_CHECKSUM(*), beräknad på en rad i en tabell, returnerar samma värde som så länge raden inte ändras senare. BINARY_CHECKSUM uppfyller egenskaperna hos en hashfunktion: när den appliceras på två olika uttryckslistor returnerar den samma värde om motsvarande element i de två listorna har samma typ och är lika när de jämförs med operatorn lika (=)

För denna definition säger vi att nollvärden, av en specificerad typ, jämförs som lika värden. Om minst ett av värdena i uttryckslistan ändras kan även uttryckskontrollsumman ändras. Denna ändring är dock inte garanterad, så för att upptäcka om värden har ändrats bör du endast använda BINARY_CHECKSUM om din applikation tål en och annan missad ändring. Annars, överväg att använda HASHBYTES istället. Med en specificerad MD5-hashalgoritm är sannolikheten att HASHBYTES returnera samma resultat, för två olika indata, mycket lägre än BINARY_CHECKSUM.

BINARY_CHECKSUM kan operera över en lista av uttryck, och den returnerar samma värde för en specificerad lista. BINARY_CHECKSUM applicerad på två uttryckslistor returnerar samma värde om motsvarande element i de två listorna har samma typ- och byterepresentation. För denna definition anses nullvärden av en specificerad typ ha samma byterepresentation.

BINARY_CHECKSUM och CHECKSUM är liknande funktioner. De kan användas för att beräkna ett kontrollsummevärde på en lista av uttryck, och ordningen på uttrycken påverkar det resulterande värdet. Ordningen på kolumner som används för BINARY_CHECKSUM(*) är den ordning av kolumner som anges i tabellen eller vydefinitionen. Denna ordning inkluderar beräknade kolumner.

BINARY_CHECKSUM och CHECKSUM returnera olika värden för strängdatatyperna, där locale kan göra att strängar med olika representation jämförs som lika. Strängdatatyperna är:

  • tecken
  • nchar
  • nvarchar
  • varchar
  • sql_variant (om bastypen av sql_variant är en strängdatatyp)

Till exempel har strängarna McCavity och Mccavity olika BINARY_CHECKSUM värden. I kontrast, för en server CHECKSUM utan läge, returnerar samma kontrollsummevärden för dessa strängar. Du bör undvika jämförelse av CHECKSUM värden med BINARY_CHECKSUM värden.

BINARY_CHECKSUMstöder valfri längd av typen varbinary(max) och upp till 255 tecken av typen nvarchar(n) / nvarchar(max).

Examples

Detta exempel används BINARY_CHECKSUM för att upptäcka förändringar i en tabellrad.

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