Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

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

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 werden hinzugefügt:

Die Hauptabsicht der CHECKSUM-Funktionen besteht darin, einen Hash-Index basierend auf einem Ausdruck oder einer Spaltenliste zu erstellen. Wenn Sie es beispielsweise verwenden, 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, 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 viele Beispiele zu dieser Funktionalität.

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

Sie müssen sicherstellen, dass die Spalten- oder Ausdrucksreihenfolge zwischen den beiden zu vergleichenden Prüfsummen gleich ist, 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. d. h. die gewünschte Granularitätsstufe.

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, wird nur derselbe Wert zurückgegeben.

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