hvad er forskellen mellem CHECKSUM() og BINARY_CHECKSUM () og hvornår/hvad er de relevante brugsscenarier?
Tjek følgende blogindlæg, der fremhæver forskellene.
CHECKSUM Functions in SQL Server 2005
tilføjelse af info fra dette link:
den vigtigste hensigt med CHECKSUMFUNKTIONERNE er at opbygge et hashindeks baseret på et udtryk eller en kolonneliste. Hvis du siger, at du bruger den til at beregne og gemme en kolonne på tabelniveau for at angive kontrolsummen over de kolonner, der gør en post unik i en tabel, kan dette være nyttigt til at bestemme, om en række er ændret eller ej. Denne mekanisme kan derefter bruges i stedet for at slutte sig til alle de kolonner, der gør posten unik for at se, om posten er blevet opdateret eller ej. Server Books Online har en masse eksempler på dette stykke funktionalitet.
et par ting at passe på, når du bruger disse funktioner:
du skal sørge for, at kolonnen(s) eller udtryk rækkefølge er den samme mellem de to kontrolsummer, der sammenlignes ellers værdien ville være anderledes og vil føre til problemer.
vi vil ikke anbefale at bruge checksum (*), da den værdi, der genereres på den måde, vil være baseret på kolonnerækkefølgen for tabeldefinitionen på kørselstid, som let kan ændres over en periode. Så Definer eksplicit kolonnelisten.
vær forsigtig, når du inkluderer kolonnerne datetime-datatype, da granulariteten er 1/300 af et sekund, og selv en lille variation vil resultere i en anden checksumværdi. Så hvis du skal bruge en datetime-datatypekolonne, skal du sørge for at få den nøjagtige dato + Time/min. dvs. det granularitetsniveau, du ønsker.
der er tre kontrolsumfunktioner tilgængelige for dig:
kontrolsum: dette blev beskrevet ovenfor.
CHECKSUM_AGG: dette returnerer kontrolsummen for værdierne i en gruppe, og Null-værdier ignoreres i dette tilfælde. Dette fungerer også med den nye analytiske funktions overklausul i Server 2005.
BINARY_CHECKSUM: som navnet siger, returnerer dette den binære checksumværdi beregnet over en række eller en liste over udtryk. Forskellen mellem CHECKSUM og BINARY_CHECKSUM er i den værdi, der genereres for strengdatatyperne. Et eksempel på en sådan forskel er de værdier, der genereres for “dechiffrere”, og “dechiffrere” vil være forskellige i tilfælde af en BINARY_CHECKSUM, men vil være de samme for CHECKSUMFUNKTIONEN (forudsat at vi har en ufølsom installation af forekomsten). En anden forskel er i sammenligningen af udtryk. BINARY_CHECKSUM () returnerer den samme værdi, hvis elementerne i to udtryk har samme type og byte-repræsentation. Så” 2volvo Director 20 “og” 3volvo Director 30 ” giver den samme værdi, men CHECKSUM () – funktionen evaluerer typen såvel som sammenligner de to strenge, og hvis de er ens, returneres kun den samme værdi.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363