care sunt diferențele dintre CHECKSUM() și BINARY_CHECKSUM () și când/care sunt scenariile de utilizare adecvate?
consultați următoarea postare pe blog care evidențiază diferențele.
CHECKSUM Functions in SQL Server 2005
adăugarea de informații de la acest link:
intenția cheie a funcțiilor CHECKSUM este de a construi un index hash bazat pe o expresie sau o listă de coloane. Dacă spuneți că îl utilizați pentru a calcula și stoca o coloană la nivelul tabelului pentru a indica suma de control peste coloanele care fac o înregistrare unică într-un tabel, atunci acest lucru poate fi util pentru a determina dacă un rând s-a schimbat sau nu. Acest mecanism poate fi apoi utilizat în loc să se unească cu toate coloanele care fac înregistrarea unică pentru a vedea dacă înregistrarea a fost actualizată sau nu. SQL Server Books Online are o mulțime de exemple pe această bucată de funcționalitate.
câteva lucruri de care trebuie să aveți grijă atunci când utilizați aceste funcții:
trebuie să vă asigurați că coloana(coloanele) sau ordinea expresiei sunt aceleași între cele două sume de control care sunt comparate, altfel valoarea ar fi diferită și va duce la probleme.
nu vă recomandăm să utilizați suma de control (*), deoarece valoarea care va fi generată în acest fel se va baza pe ordinea coloanei definiției tabelului în timpul rulării, care se poate schimba cu ușurință într-o perioadă de timp. Deci, definiți în mod explicit lista de coloane.
aveți grijă când includeți coloanele de tip datetime, deoarece granularitatea este de 1/300 dintr-o secundă și chiar și o mică variație va rezulta într-o valoare diferită a sumei de control. Deci, dacă trebuie să utilizați o coloană de tip de date datetime, asigurați-vă că obțineți data exactă + oră/min. adică nivelul de granularitate pe care îl doriți.
există trei funcții de control disponibile pentru tine:
control: Acest lucru a fost descris mai sus.
CHECKSUM_AGG: aceasta returnează suma de control a valorilor dintr-un grup și valorile nule sunt ignorate în acest caz. Acest lucru funcționează, de asemenea, cu clauza over a funcției analitice noi în SQL Server 2005.
BINARY_CHECKSUM: după cum afirmă numele, aceasta returnează valoarea sumei de control binare calculată pe un rând sau o listă de expresii. Diferența dintre CHECKSUM și BINARY_CHECKSUM este în valoarea generată pentru tipurile de date șir. Un exemplu de astfel de diferență este valorile generate pentru “DECIPHER” și “decipher” vor fi diferite în cazul unui BINARY_CHECKSUM, dar vor fi aceleași pentru funcția CHECKSUM (presupunând că avem o instalare insensibilă a cazului instanței). O altă diferență este în compararea expresiilor. BINARY_CHECKSUM () returnează aceeași valoare dacă elementele a două expresii au același tip și reprezentare octet. Deci, ” 2volvo Director 20 “și” 3volvo Director 30 ” vor produce aceeași valoare, totuși funcția CHECKSUM() evaluează tipul și compară cele două șiruri și dacă sunt egale, atunci se returnează doar aceeași valoare.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363