sql >> Database >  >> RDS >> Sqlserver

Wat zijn de verschillen tussen CHECKSUM() en BINARY_CHECKSUM() en wanneer/wat zijn de juiste gebruiksscenario's?

Bekijk de volgende blogpost waarin de verschillen worden benadrukt.

http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

Info toevoegen via deze link:

De belangrijkste bedoeling van de CHECKSUM-functies is het bouwen van een hash-index op basis van een uitdrukking of een kolomlijst. Als u het bijvoorbeeld gebruikt om een ​​kolom op tabelniveau te berekenen en op te slaan om de controlesom aan te geven over de kolommen die een record uniek maken in een tabel, dan kan dit handig zijn om te bepalen of een rij is gewijzigd of niet. Dit mechanisme kan dan worden gebruikt in plaats van alle kolommen samen te voegen die het record uniek maken om te zien of het record is bijgewerkt of niet. SQL Server Books Online heeft veel voorbeelden van dit stukje functionaliteit.

Een paar dingen om op te letten bij het gebruik van deze functies:

U moet ervoor zorgen dat de kolom(men) of uitdrukkingsvolgorde hetzelfde is tussen de twee controlesommen die worden vergeleken, anders zou de waarde anders zijn en tot problemen leiden.

We raden het gebruik van checksum(*) af, omdat de waarde die op die manier wordt gegenereerd, gebaseerd zal zijn op de kolomvolgorde van de tabeldefinitie tijdens runtime, die in de loop van de tijd gemakkelijk kan veranderen. Definieer dus expliciet de kolomlijst.

Wees voorzichtig wanneer u de data-type kolommen datetime opneemt, aangezien de granulariteit 1/300ste van een seconde is en zelfs een kleine variatie zal resulteren in een andere checksum-waarde. Dus, als je een datetime data-type kolom moet gebruiken, zorg er dan voor dat je de exacte datum + uur/min krijgt. d.w.z. het niveau van granulariteit dat u wilt.

Er zijn drie controlesomfuncties voor u beschikbaar:

CHECKSUM:Dit is hierboven beschreven.

CHECKSUM_AGG:Dit retourneert de controlesom van de waarden in een groep 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, retourneert dit de binaire controlesomwaarde berekend over een rij of een lijst met expressies. Het verschil tussen CHECKSUM en BINARY_CHECKSUM zit in de waarde die wordt gegenereerd voor de string data-types. Een voorbeeld van een dergelijk verschil is dat de waarden die worden gegenereerd voor "DECIPHER" en "decipher" anders zullen zijn in het geval van een BINARY_CHECKSUM, maar hetzelfde zullen zijn voor de functie CHECKSUM (ervan uitgaande dat we een hoofdletterongevoelige installatie van de instantie hebben). Een ander verschil zit in de vergelijking van uitdrukkingen. BINARY_CHECKSUM() retourneert dezelfde waarde als de elementen van twee expressies hetzelfde type en dezelfde byterepresentatie 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, wordt alleen dezelfde waarde geretourneerd.

Example:
STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
------------------- ----------------------    -----------
2Volvo Director 20  -1356512636                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363


  1. ProgrammingError:syntaxisfout op of nabij bij het uitvoeren van een query in python met behulp van psycopg2

  2. Hoe de spring-boot-app te starten zonder afhankelijk te zijn van de database?

  3. TSQL gebruiken om een ​​waarde uit te pakken

  4. Invoegen in... Samenvoegen... Selecteer (SQL Server)