- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (alla versioner som stöds)Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics
returnerar kontrollsummans värde beräknat över en tabellrad eller över en uttryckslista. Använd CHECKSUM
för att bygga hashindex.
Transact-SQL Syntax konventioner
Syntax
CHECKSUM ( * | expression )
Obs
för att visa Transact-SQL syntax för SQL Server 2014 och tidigare, se tidigare versioner dokumentation.
Obs
den här syntaxen stöds inte av serverlös SQL-pool i Azure Synapse Analytics.
argument
*
Detta argument anger att beräkningen av kontrollsumman täcker alla tabellkolumner. CHECKSUM
returnerar ett fel om någon kolumn har en datatyp som inte kan jämföras. Icke-jämförbara datatyper inkluderar:
- markör
- bild
- ntext
- text
- XML
en annan datatyp som inte kan jämföras är sql_variant med någon av de föregående datatyperna som Bastyp.
expression
ett uttryck av vilken typ som helst, utom en datatyp som inte kan jämföras.
Returtyper
int
anmärkningar
CHECKSUM
beräknar ett hashvärde, kallat kontrollsumman, över sin argumentlista. Använd detta hashvärde för att bygga hashindex. Ett hashindex kommer att resultera om funktionen CHECKSUM
har kolumnargument och ett index byggs över det beräknade värdet CHECKSUM
. Detta kan användas för jämställdhetssökningar över kolumnerna.
funktionenCHECKSUM
uppfyller hash-Funktionsegenskaper:CHECKSUM
applicerad över två listor med uttryck kommer att returnera samma värde om motsvarande element i de två listorna har samma datatyp och om de motsvarande elementen har jämlikhet när de jämförs med operatorn equals ( = ). Null-värden av en specificerad typ definieras för att jämföra Som lika förCHECKSUM
funktionssyften. Om minst ett av värdena i uttryckslistan ändras kommer listkontrollsumman troligen att ändras. Detta är dock inte garanterat.Därför, för att upptäcka om värden har ändrats, rekommenderar vi användning av CHECKSUM
endast om din ansökan kan tolerera en tillfällig missad förändring. Annars kan du överväga att använda HASHBYTES
istället. Med en specificerad MD5-hashalgoritm är sannolikheten att HASHBYTES
returnerar samma resultat, för två olika ingångar, mycket lägre jämfört med CHECKSUM
.
uttrycksordningen påverkar det beräknade värdet CHECKSUM
. Ordningen på kolumner som används för CHECKSUM(*)
är ordningen på kolumner som anges i tabellen eller vydefinitionen. Detta inkluderar beräknade kolumner.
CHECKSUM
värdet beror på sorteringen. Samma värde som lagras med en annan sortering returnerar ett annatCHECKSUM
värde.
CHECKSUM ()
garanterar inte unika resultat.
exempel
dessa exempel visar användningen av CHECKSUM
för att bygga hashindex.
för att bygga hashindexet lägger det första exemplet till en beräknad kontrollsummakolumn i tabellen vi vill indexera. Det bygger sedan ett index på kolumnen kontrollsumma.
-- 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
detta exempel visar användningen av ett kontrollsummaindex som ett hashindex. Detta kan hjälpa till att förbättra indexeringshastigheten när kolumnen till index är en lång teckenkolumn. Kontrollsummaindexet kan användas för jämställdhetssökningar.
/*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
Indexskapande i den beräknade kolumnen materialiserar kolumnen kontrollsumma, och eventuella ändringar av värdet ProductName
kommer att spridas till kolumnen kontrollsumma. Alternativt kan vi bygga ett index direkt på kolumnen vi vill indexera. Men för långa nyckelvärden kommer ett vanligt index förmodligen inte att fungera såväl som ett kontrollsummaindex.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)