CHECKSUM (Transact-SQL)

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

Lämna ett svar

Din e-postadress kommer inte publiceras.