- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: standard Server (alle understøttede versioner) standard database standardiseret Instance standard Synapse Analytics
funktionen CHECKSUM
returnerer checksumværdien beregnet over en tabelrække eller over en udtryksliste. Brug CHECKSUM
til at opbygge hashindekser.
Transact-SYNTAKSKONVENTIONER
syntaks
CHECKSUM ( * | expression )
Bemærk
for at se Transact-syntaks syntaks for Server 2014 og tidligere, Se tidligere versioner dokumentation.
Bemærk
denne syntaks understøttes ikke af en serverløs pulje i Synapse Analytics.
argumenter
*
Dette argument angiver, at checksumberegningen dækker alle tabelkolonner. CHECKSUM
returnerer en fejl, hvis en kolonne har en ikke-sammenlignelig datatype. Ikke-sammenlignelige datatyper inkluderer:
- cursor
- billede
- tekst
- en anden ikke-sammenlignelig datatype er kvadratisk med en af de foregående datatyper som basistype.
udtryk
Et udtryk af enhver type, undtagen en ikke-sammenlignelig datatype.Returtyper
int
bemærkninger
CHECKSUM
beregner en hashværdi, kaldet checksum, over sin argumentliste. Brug denne hashværdi til at opbygge hashindekser. Et hash-indeks vil resultere, hvis funktionenCHECKSUM
har kolonneargumenter, og et indeks er bygget over den beregnedeCHECKSUM
værdi. Dette kan bruges til ligestillingssøgninger over kolonnerne.CHECKSUM
funktionen opfylder hash-funktionsegenskaber:CHECKSUM
anvendt over to lister med udtryk returnerer den samme værdi, hvis de tilsvarende elementer i de to lister har den samme datatype, og hvis de tilsvarende elementer har lighed, når de sammenlignes ved hjælp af operatoren lig med ( = ). Null værdier af en bestemt type er defineret til at sammenligne som lige forCHECKSUM
funktionsformål. Hvis mindst en af værdierne i udtrykslisten ændres, ændres listekontrolsummen sandsynligvis. Dette er dog ikke garanteret.Derfor, for at opdage, om værdierne er ændret, anbefaler vi brug afCHECKSUM
kun hvis din ansøgning kan tolerere en lejlighedsvis savnet ændring. Ellers overveje at brugeHASHBYTES
i stedet. Med en specificeret MD5 hash-algoritme er sandsynligheden for, atHASHBYTES
returnerer det samme resultat for to forskellige indgange, meget lavere sammenlignet medCHECKSUM
.ekspressionsrækkefølgen påvirker den beregnede
CHECKSUM
værdi. Rækkefølgen af kolonner, der bruges tilCHECKSUM(*)
er rækkefølgen af kolonner, der er angivet i tabellen eller visningsdefinitionen. Dette inkluderer beregnede kolonner.CHECKSUM
værdien afhænger af sorteringen. Den samme værdi, der er gemt med en anden sortering, returnerer en andenCHECKSUM
værdi.CHECKSUM ()
garanterer ikke unikke resultater.eksempler
disse eksempler viser brugen af
CHECKSUM
til at opbygge hashindekser.for at opbygge hashindekset tilføjer det første eksempel en beregnet kontrolsumkolonne til den tabel, vi vil indeksere. Det bygger derefter et 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 eksempel viser brugen af et checksumindeks som et hashindeks. Dette kan hjælpe med at forbedre indekseringshastigheden, når kolonnen til indeks er en kolonne med langt tegn. Checksumindekset kan bruges til ligestillingssøgninger.
/*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
Indeksoprettelse på den beregnede kolonne materialiserer checksumkolonnen, og eventuelle ændringer i
ProductName
værdien vil udbrede til checksumkolonnen. Alternativt kan vi opbygge et indeks direkte på den kolonne, vi vil indeksere. Men for lange nøgleværdier vil et almindeligt indeks sandsynligvis ikke fungere så godt som et checksumindeks.See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)