Was sind die Unterschiede zwischen CHECKSUM() und BINARY_CHECKSUM() und wann / was sind die geeigneten Nutzungsszenarien?
Schauen Sie sich den folgenden Blogbeitrag an, der die Unterschiede hervorhebt.
CHECKSUM Functions in SQL Server 2005
Hinzufügen von Informationen über diesen Link:
Die Hauptabsicht der Prüfsummenfunktionen besteht darin, einen Hash-Index basierend auf einem Ausdruck oder einer Spaltenliste zu erstellen. Wenn Sie damit beispielsweise eine Spalte auf Tabellenebene berechnen und speichern, um die Prüfsumme für 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 sich mit allen Spalten zu verbinden, die den Datensatz eindeutig machen, um festzustellen, ob der Datensatz aktualisiert wurde oder nicht. SQL Server Books Online enthält viele Beispiele für diese Funktionalität.
Ein paar Dinge, auf die Sie achten sollten, wenn Sie diese Funktionen verwenden:
Sie müssen sicherstellen, dass die Spalten- oder Ausdruckreihenfolge zwischen den beiden Prüfsummen, die verglichen werden, identisch ist.
Wir würden die Verwendung von checksum(*) nicht empfehlen, da der auf diese Weise generierte Wert auf der Spaltenreihenfolge der Tabellendefinition zur Laufzeit basiert, die sich im Laufe der Zeit leicht ändern kann. Definieren Sie also explizit die Spaltenliste.
Seien Sie vorsichtig, wenn Sie die datetime-Datentypspalten einschließen, da die Granularität 1/300 Sekunde beträgt und selbst eine kleine Variation zu einem anderen Prüfsummenwert führt. Wenn Sie also eine datetime Datentypspalte verwenden müssen, stellen Sie sicher, dass Sie das genaue Datum + Stunde / Minute erhalten. dh 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 Null-Werte 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 wird. 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 ist, dass die für “DECIPHER” und “decipher” generierten Werte im Fall einer BINARY_CHECKSUM unterschiedlich sind, für die CHECKSUM-Funktion jedoch gleich sind (vorausgesetzt, wir haben eine Installation der Instanz, bei der die Groß- und 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 von zwei Ausdrücken den gleichen Typ und die gleiche Byte-Darstellung haben. Also, “2Volvo Director 20” und “3Volvo Director 30” ergeben den gleichen Wert, aber die CHECKSUM() Funktion wertet den Typ aus und vergleicht die beiden Strings und wenn sie gleich sind, dann wird nur der gleiche Wert zurückgegeben.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363