Wat zijn de verschillen tussen CHECKSUM () en BINARY_CHECKSUM () en wanneer/Wat zijn de geschikte gebruiksscenario ‘ s?
bekijk de volgende blogpost die de verschillen benadrukt.
CHECKSUM Functions in SQL Server 2005
info toevoegen van deze link:
de belangrijkste bedoeling van de CHECKSUM functies is om een hash-index te bouwen op basis van een expressie of een kolomlijst. Als je zegt dat je het gebruikt om een kolom op tabelniveau te berekenen en op te slaan om de checksum aan te geven over de kolommen die een record uniek maken in een tabel, dan kan dit nuttig zijn bij het bepalen of een rij is veranderd of niet. Dit mechanisme kan dan worden gebruikt in plaats van samen te voegen met alle kolommen die het record uniek maken om te zien of het record is bijgewerkt of niet. SQL Server Books Online heeft veel voorbeelden van deze functionaliteit.
een paar dingen om op te letten bij het gebruik van deze functies:
u moet ervoor zorgen dat de kolom(s) of uitdrukkingsvolgorde gelijk is tussen de twee controlesommen die worden vergeleken anders zou de waarde anders zijn en tot problemen leiden.
we raden niet aan om checksum(*) te gebruiken, omdat de waarde die op die manier gegenereerd wordt gebaseerd zal zijn op de kolomvolgorde van de tabeldefinitie tijdens de looptijd die gemakkelijk over een bepaalde periode kan veranderen. Dus, expliciet definiëren van de kolom lijst.
wees voorzichtig wanneer u de DateTime data-type kolommen opneemt omdat de granulariteit 1/300E van een seconde is en zelfs een kleine variatie zal resulteren in een andere controlesom waarde. Dus, als je een datetime data-type kolom moet gebruiken, zorg er dan voor dat je de exacte datum + uur/min krijgt. dat wil zeggen het niveau van granulariteit dat je wilt.
er zijn drie checksum functies beschikbaar voor u:
CHECKSUM: dit werd hierboven beschreven.
CONTROLESOM_AGG: dit geeft de controlesom van de waarden in een groep terug en Null-waarden worden in dit geval genegeerd. Dit werkt ook met de OVER-clausule van de nieuwe analytische functie in SQL Server 2005.
BINARY_CHECKSUM: zoals de naam aangeeft, geeft dit de waarde van de binaire checksum terug die is berekend over een rij of een lijst met expressies. Het verschil tussen CHECKSUM en BINARY_CHECKSUM zit in de waarde gegenereerd voor de string data-types. Een voorbeeld van zo ‘ n verschil is dat de waarden die gegenereerd worden voor “ontcijferen” en “ontcijferen” anders zullen zijn in het geval van een BINARY_CHECKSUM maar hetzelfde zullen zijn voor de CHECKSUM functie (aangenomen dat we een hoofdletterongevoelige installatie van de instantie hebben). Een ander verschil is de vergelijking van uitdrukkingen. BINARY_CHECKSUM () geeft dezelfde waarde terug als de elementen van twee expressies hetzelfde type en byte representatie hebben. Dus,” 2Volvo Director 20 “en” 3Volvo Director 30 ” zullen dezelfde waarde opleveren, maar de functie CHECKSUM () evalueert het type en vergelijkt de twee strings en als ze gelijk zijn, dan wordt alleen dezelfde waarde geretourneerd.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363