[FIXED] Was sind die Unterschiede zwischen CHECKSUM() und BINARY_CHECKSUM() und wann/was sind die geeigneten Anwendungsszenarien?

Ausgabe

Auch hier erklärt MSDN nicht wirklich im Klartext den genauen Unterschied oder die Informationen, wann man sich für eines entscheiden sollte.

PRÜFSUMME

Gibt den Prüfsummenwert zurück, der über eine Zeile einer Tabelle oder über eine Liste von Ausdrücken berechnet wurde. CHECKSUM ist für die Verwendung beim Erstellen von Hash-Indizes vorgesehen.

BINARY_CHECKSUM

Gibt den binären Prüfsummenwert zurück, der über eine Zeile einer Tabelle oder über eine Liste von Ausdrücken berechnet wurde. BINARY_CHECKSUM kann verwendet werden, um Änderungen an einer Zeile einer Tabelle zu erkennen.

Es weist darauf hin, dass eine binäre Prüfsumme verwendet werden sollte, um Zeilenänderungen zu erkennen, aber nicht warum.

Lösung

Sehen Sie sich den folgenden Blogbeitrag an, der die Unterschiede hervorhebt.

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

Informationen von diesem Link hinzufügen:

Die Hauptabsicht der CHECKSUM-Funktionen besteht darin, einen Hash-Index basierend auf einem Ausdruck oder einer Spaltenliste zu erstellen. Wenn Sie sagen, Sie verwenden es, um eine Spalte auf Tabellenebene zu berechnen und zu speichern, um die Prüfsumme über die Spalten anzugeben, die einen Datensatz in einer Tabelle eindeutig machen, dann kann dies hilfreich sein, um festzustellen, ob sich eine Zeile geändert hat oder nicht. Dieser Mechanismus kann dann verwendet werden, anstatt mit allen Spalten zu verknüpfen, die den Datensatz eindeutig machen, um zu sehen, ob der Datensatz aktualisiert wurde oder nicht. Die SQL Server-Onlinedokumentation enthält zahlreiche Beispiele zu dieser Funktionalität.

Ein paar Dinge, auf die Sie achten sollten, wenn Sie diese Funktionen verwenden:

Sie müssen sicherstellen, dass die Spalte(n) oder die Ausdrucksreihenfolge zwischen den beiden Prüfsummen, die verglichen werden, gleich sind, sonst wäre der Wert unterschiedlich und würde zu Problemen führen.

Wir würden die Verwendung von checksum(*) nicht empfehlen, da der Wert, der auf diese Weise generiert wird, auf der Spaltenreihenfolge der Tabellendefinition zur Laufzeit basiert, die sich im Laufe der Zeit leicht ändern kann. Definieren Sie also explizit die Spaltenauflistung.

Seien Sie vorsichtig, wenn Sie die Spalten vom Datentyp datetime einbeziehen, da die Granularität 1/300 Sekunde beträgt und selbst eine kleine Abweichung zu einem anderen Prüfsummenwert führt. Wenn Sie also eine Spalte vom Datentyp datetime verwenden müssen, stellen Sie sicher, dass Sie das genaue Datum + Stunde/Minute erhalten. dh die gewünschte Granularität.

Es stehen Ihnen drei Prüfsummenfunktionen zur Verfügung:

PRÜFSUMME: Dies wurde oben beschrieben.

CHECKSUM_AGG: Dies gibt die Prüfsumme der Werte in einer Gruppe zurück und Nullwerte werden in diesem Fall ignoriert. Dies funktioniert auch mit der OVER-Klausel der neuen Analysefunktion in SQL Server 2005.

BINARY_CHECKSUM: Wie der Name schon sagt, gibt dies den binären Prüfsummenwert zurück, der über eine Zeile oder eine Liste von Ausdrücken berechnet wurde. Der Unterschied zwischen CHECKSUM und BINARY_CHECKSUM liegt im Wert, der für die String-Datentypen generiert wird. Ein Beispiel für einen solchen Unterschied sind die für „DECIPHER“ und „decipher“ generierten Werte, die im Fall einer BINARY_CHECKSUM unterschiedlich sind, aber für die CHECKSUM-Funktion gleich sind (vorausgesetzt, wir haben eine Installation der Instanz, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird). Ein weiterer Unterschied besteht im Vergleich von Ausdrücken. BINARY_CHECKSUM() gibt den gleichen Wert zurück, wenn die Elemente zweier Ausdrücke den gleichen Typ und die gleiche Bytedarstellung haben. „2Volvo Director 20“ und „3Volvo Director 30“ ergeben also denselben Wert, aber die Funktion CHECKSUM() wertet den Typ aus und vergleicht die beiden Zeichenfolgen, und wenn sie gleich sind,

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


Beantwortet von –
John Sansom


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like