Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-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