CHECKSUM (Transact-SQL)

  • 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)

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.