CHECKSUM (Transact-SQL)

  • 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

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.