Delen via


BINARY_CHECKSUM (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Geeft de binaire checksumwaarde terug die is berekend over een rij in een tabel of over een lijst van expressies.

Transact-SQL syntaxis-conventies

Syntaxis

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

Opmerking

Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Arguments

*

Geeft aan dat de berekening alle kolommen in de tabel omvat. BINARY_CHECKSUM negeert kolommen met niet-vergelijkbare datatypen in zijn berekening. Niet-vergelijkbare datatypen zijn onder andere:

  • cursor
  • image
  • ntext
  • tekst
  • xml
  • niet-vergelijkbare common language runtime (CLR) gebruikersgedefinieerde types

expressie

Een expressie van elk type. BINARY_CHECKSUM negeert expressies van niet-vergelijkbare datatypen in de berekening.

Retourtypen

int

Opmerkingen

BINARY_CHECKSUM(*), berekend op elke rij van een tabel, geeft dezelfde waarde terug zolang de rij later niet wordt aangepast. BINARY_CHECKSUM voldoet aan de eigenschappen van een hashfunctie: wanneer toegepast op twee willekeurige lijsten van expressies, geeft deze dezelfde waarde terug als de overeenkomstige elementen van de twee lijsten hetzelfde type hebben en gelijk zijn wanneer ze worden vergeleken met de operator: gelijk (=).

Voor deze definitie zeggen we dat nulwaarden van een bepaald type gelijke waarden zijn. Als ten minste één van de waarden in de expressielijst verandert, kan ook de expressie-checksum veranderen. Deze wijziging is echter niet gegarandeerd, en om te detecteren of waarden zijn veranderd, moet je alleen gebruiken BINARY_CHECKSUM als je applicatie een occasionele gemiste wijziging kan verdragen. Anders kun je overwegen om het in plaats daarvan te gebruiken HASHBYTES . Met een gespecificeerd MD5-hashalgoritme is de kans dat HASHBYTES hetzelfde resultaat teruggeeft, voor twee verschillende invoer, veel lager dan BINARY_CHECKSUM.

BINARY_CHECKSUM kan werken over een lijst van expressies, en geeft dezelfde waarde terug voor een gespecificeerde lijst. BINARY_CHECKSUM toegepast op twee willekeurige lijsten van expressies geeft dezelfde waarde als de overeenkomstige elementen van de twee lijsten dezelfde type- en byterepresentatie hebben. Voor deze definitie worden nulwaarden van een gespecificeerd type beschouwd als dezelfde byterepresentatie.

BINARY_CHECKSUM en CHECKSUM zijn vergelijkbare functies. Ze kunnen worden gebruikt om een checksumwaarde te berekenen op een lijst van expressies, en de volgorde van expressies beïnvloedt de resulterende waarde. De volgorde van kolommen die voor BINARY_CHECKSUM(*) gebruikt worden, is de volgorde van kolommen die in de tabel of weergave is gespecificeerd. Deze ordening omvat berekende kolommen.

BINARY_CHECKSUM en CHECKSUM geven verschillende waarden terug voor de string-datatypes, waarbij locale ervoor kan zorgen dat strings met verschillende representatie als gelijk worden vergeleken. De datatypen strings zijn:

  • teken
  • nchar
  • nvarchar
  • varchar
  • sql_variant (als het basistype van sql_variant een stringdatatype is)

Bijvoorbeeld, de strings en Mccavity hebben verschillende BINARY_CHECKSUM waardenMcCavity. Daarentegen geeft voor een hoofdletter-ongevoelige server CHECKSUM dezelfde checksumwaarden terug voor die strings. Je moet het vergelijken van CHECKSUM waarden met BINARY_CHECKSUM waarden vermijden.

BINARY_CHECKSUMondersteunt elke lengte van type varbinary(max) en tot 255 tekens van type nvarchar(n) / nvarchar(max).

Voorbeelden

Dit voorbeeld wordt gebruikt BINARY_CHECKSUM om wijzigingen in een tabelrij te detecteren.

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