- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (alle ondersteunde versies) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
The CHECKSUM
functie retourneert de checksum waarde berekend over een tabelrij, of over een expressielijst. Gebruik CHECKSUM
om hash-indexen te bouwen.
Transact-SQL syntaxis conventies
syntaxis
CHECKSUM ( * | expression )
opmerking
om de Transact-SQL syntaxis voor SQL Server 2014 en eerder te bekijken, zie de documentatie van vorige versies.
Note
deze syntaxis wordt niet ondersteund door serverloze SQL-pool in Azure Synapse Analytics.
argumenten
*
dit argument geeft aan dat de controlesomberekening alle tabelkolommen dekt. CHECKSUM
geeft een fout terug als een kolom een niet-vergelijkbaar gegevenstype heeft. Niet-vergelijkbare gegevenstypen omvatten:
- cursor
- image
- ntext
- tekst
- XML
een ander niet-vergelijkbaar gegevenstype is sql_variant met een van de voorgaande gegevenstypen als basistype.
expressie
Een expressie van elk type, met uitzondering van een niet-vergelijkbaar gegevenstype.
Return types
Int
opmerkingen
CHECKSUM
berekent een hashwaarde, de checksum genoemd, over de lijst met argumenten. Gebruik deze hash waarde om hash indexen te bouwen. Een hash-index zal resulteren als de functie CHECKSUM
kolomargumenten heeft, en een index wordt gebouwd over de berekende waarde CHECKSUM
. Dit kan worden gebruikt voor gelijkheid zoekopdrachten over de kolommen.
de functie CHECKSUM
voldoet aan hash functie-eigenschappen: CHECKSUM
toegepast over twee lijsten van expressies zal dezelfde waarde retourneren, als de overeenkomstige elementen van de twee lijsten hetzelfde gegevenstype hebben, en als die overeenkomstige elementen gelijk zijn wanneer ze worden vergeleken met de operator is gelijk aan ( = ). Null-waarden van een bepaald type zijn gedefinieerd om als gelijk te vergelijken voor CHECKSUM
functiedoeleinden. Als tenminste één van de waarden in de expressielijst verandert, zal de controlesom van de lijst waarschijnlijk veranderen. Dit is echter niet gegarandeerd.Om te detecteren of waarden zijn veranderd, raden we daarom aan om CHECKSUM
alleen te gebruiken als uw toepassing af en toe een gemiste verandering kan verdragen. Overweeg anders om HASHBYTES
te gebruiken. Met een opgegeven MD5 hash algoritme is de kans dat HASHBYTES
hetzelfde resultaat geeft, voor twee verschillende ingangen, veel lager dan CHECKSUM
.
De expressievolgorde beïnvloedt de berekende CHECKSUM
waarde. De volgorde van kolommen die wordt gebruikt voor CHECKSUM(*)
is de volgorde van kolommen die is opgegeven in de definitie van tabel of weergave. Dit geldt ook voor berekende kolommen.
de CHECKSUM
waarde hangt af van de collatie. Dezelfde waarde opgeslagen met een andere collatie zal een andere CHECKSUM
waarde teruggeven.
CHECKSUM ()
garandeert geen unieke resultaten.
voorbeelden
Deze voorbeelden tonen het gebruik van CHECKSUM
om hash-indexen te bouwen.
om de hash-index te bouwen, voegt het eerste voorbeeld een berekende checksumkolom toe aan de tabel die we willen indexeren. Het bouwt dan een index op de checksum kolom.
-- Create a checksum index. SET ARITHABORT ON; USE AdventureWorks2012; GO ALTER TABLE Production.Product ADD cs_Pname AS CHECKSUM(Name); GO CREATE INDEX Pname_index ON Production.Product (cs_Pname); GO
dit voorbeeld toont het gebruik van een checksum index als een hash index. Dit kan helpen bij het verbeteren van de indexeersnelheid wanneer de kolom om te indexeren een lange tekenkolom is. De checksum index kan worden gebruikt voor gelijkheid zoekopdrachten.
/*Use the index in a SELECT query. Add a second search condition to catch stray cases where checksums match, but the values are not the same.*/ SELECT * FROM Production.Product WHERE CHECKSUM(N'Bearing Ball') = cs_Pname AND Name = N'Bearing Ball'; GO
Index creatie op de berekende kolom materialiseert de controlesom kolom, en eventuele wijzigingen in de ProductName
waarde zal doorgeven aan de controlesom kolom. Als alternatief kunnen we een index direct bouwen op de kolom die we willen indexeren. Echter, voor lange sleutelwaarden zal een reguliere index waarschijnlijk niet zo goed presteren als een checksum index.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)