- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (alle støttede versjoner)Azure SQL Databaseazure Synapse Analytics
CHECKSUM
funksjonen returnerer sjekksumverdien BEREGNET Over en tabellrad eller over en uttrykksliste. Bruk CHECKSUM
for å bygge hashindekser.
Transact-SQL Syntaks Konvensjoner
Syntaks
CHECKSUM ( * | expression )
Merk
se tidligere versjoner dokumentasjon.
merk
denne syntaksen støttes ikke av serverløs SQL-utvalg I Azure Synapse Analytics.
Argumenter
*
dette argumentet angir at sjekksumberegningen dekker alle tabellkolonner. CHECKSUM
returnerer en feil hvis en kolonne har en ikke-sammenlignbar datatype. Ikke-sammenlignbare datatyper inkluderer:
- markør
- bilde
- ntext
- TEKST
- XML
en annen ikke-sammenlignbar datatype er sql_variant med en av de foregående datatypene som grunntype.
uttrykk
et uttrykk av enhver type, bortsett fra en ikke-sammenlignbar datatype.
Returtyper
int
Merknader
CHECKSUM
beregner en hash-verdi, kalt sjekksummen, over argumentlisten. Bruk denne hashverdien til å bygge hashindekser. En hash-indeks vil oppstå hvisCHECKSUM
– funksjonen har kolonneargumenter, og en indeks er bygget over den beregnedeCHECKSUM
– verdien. Dette kan brukes til likestillingssøk over kolonnene.
CHECKSUM
– funksjonen tilfredsstiller hash-funksjonsegenskaper: CHECKSUM
brukt over to lister med uttrykk, vil returnere samme verdi, hvis de tilsvarende elementene i de to listene har samme datatype, og hvis de tilsvarende elementene har likestilling når de sammenlignes med equals ( = ) operatoren. Nullverdier av en spesifisert type er definert for å sammenligne som lik forCHECKSUM
funksjonsformål. Hvis minst en av verdiene i uttrykkslisten endres, endres listekontrollsummen sannsynligvis. Dette er imidlertid ikke garantert.Derfor, for å oppdage om verdiene er endret, anbefaler vi bruk av CHECKSUM
bare hvis programmet kan tolerere en sporadisk savnet endring. Ellers bør du vurdere å bruke HASHBYTES
i stedet. Med en spesifisert MD5 hash-algoritme er sannsynligheten for at HASHBYTES
vil returnere det samme resultatet, for to forskjellige innganger, mye lavere sammenlignet med CHECKSUM
.
uttrykksrekkefølgen påvirker den beregnedeCHECKSUM
– verdien. Rekkefølgen på kolonner som brukes for CHECKSUM(*)
er rekkefølgen på kolonner som er angitt i tabellen eller visningsdefinisjonen. Dette inkluderer beregnede kolonner.
CHECKSUM
verdien avhenger av sorteringen. Den samme verdien som er lagret med en annen sortering, returnerer en annenCHECKSUM
– verdi.
CHECKSUM ()
garanterer ikke unike resultater.
Eksempler
disse eksemplene viser bruken av CHECKSUM
for å bygge hashindekser.
for å bygge hashindeksen, legger det første eksemplet en beregnet sjekksumkolonne til tabellen vi vil indeksere. Den bygger deretter en indeks på checksum kolonnen.
-- 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
dette eksemplet viser bruken av en sjekksumindeks som en hash-indeks. Dette kan bidra til å forbedre indekseringshastigheten når kolonnen til indeks er en lang tegnkolonne. Sjekksumindeksen kan brukes til likestillingssøk.
/*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
indeksopprettelse på den beregnede kolonnen materialiserer kontrollsumkolonnen, og eventuelle endringer iProductName
– verdien overføres til kontrollsumkolonnen. Alternativt kan vi bygge en indeks direkte på kolonnen vi vil indeksere. Men for lange nøkkelverdier vil en vanlig indeks sannsynligvis ikke utføre så vel som en kontrollsumindeks.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)