vilka är skillnaderna mellan CHECKSUM() och BINARY_CHECKSUM() och när/Vilka är lämpliga användningsscenarier?
kolla in följande blogginlägg som belyser skillnaderna.
CHECKSUM Functions in SQL Server 2005
lägga till information från den här länken:
den viktigaste avsikten med KONTROLLSUMMAFUNKTIONERNA är att bygga ett hashindex baserat på ett uttryck eller en kolumnlista. Om du säger att du använder den för att beräkna och lagra en kolumn på tabellnivå för att ange kontrollsumman över kolumnerna som gör en post unik i en tabell, kan det vara till hjälp för att avgöra om en rad har ändrats eller inte. Denna mekanism kan sedan användas istället för att gå med i alla kolumner som gör posten unik för att se om posten har uppdaterats eller inte. SQL Server Books Online har många exempel på denna funktionalitet.
ett par saker att se upp för när du använder dessa funktioner:
du måste se till att kolumnen / kolumnerna eller uttrycksordern är densamma mellan de två kontrollsummorna som jämförs annars skulle värdet vara annorlunda och leda till problem.
vi rekommenderar inte att du använder kontrollsumma(*) eftersom värdet som kommer att genereras på det sättet kommer att baseras på kolumnordningen för tabelldefinitionen vid körning som enkelt kan ändras över en tidsperiod. Så definiera uttryckligen kolumnlistan.
var försiktig när du inkluderar datetime-datatypskolumnerna eftersom granulariteten är 1/300th av en sekund och även en liten variation kommer att resultera i ett annat kontrollsummavärde. Så om du måste använda en Datetime-datatypskolumn, se till att du får exakt datum + timme/min. dvs nivån på granularitet som du vill ha.
det finns tre kontrollsummafunktioner tillgängliga för dig:
kontrollsumma: detta beskrivs ovan.
CHECKSUM_AGG: detta returnerar kontrollsumman för värdena i en grupp och Null-värden ignoreras i det här fallet. Detta fungerar också med den nya analytiska funktionens överklausul i SQL Server 2005.
BINARY_CHECKSUM: som namnet anger returnerar detta det binära kontrollsummavärdet beräknat över en rad eller en lista med uttryck. Skillnaden mellan kontrollsumma och BINARY_CHECKSUM är i värdet som genereras för strängdatatyperna. Ett exempel på en sådan skillnad är de värden som genereras för “dechiffrera” och “dechiffrera” kommer att vara olika i fallet med en BINARY_CHECKSUM men kommer att vara samma för KONTROLLSUMMAFUNKTIONEN (förutsatt att vi har en skiftlägeskänslig installation av instansen). En annan skillnad är i jämförelsen av uttryck. BINARY_CHECKSUM () returnerar samma värde om elementen i två uttryck har samma typ och byte-representation. Så,” 2volvo Director 20 “och” 3volvo Director 30 ” kommer att ge samma värde, men funktionen CHECKSUM() utvärderar typen och jämför de två strängarna och om de är lika returneras bara samma värde.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363