BINARY_CHECKSUM (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
Gibt den binären Prüfsummenwert zurück, der für eine Zeile einer Tabelle oder eine Liste von Ausdrücken berechnet wurde.
Transact-SQL-Syntaxkonventionen
Syntax
BINARY_CHECKSUM ( * | expression [ ,...n ] )
Hinweis
Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.
Argumente
*
Gibt an, dass die Berechnung für alle Spalten der Tabelle erfolgt. BINARY_CHECKSUM ignoriert in seiner Berechnung jede Spalte, die einen nicht vergleichbaren Datentyp hat. Die folgenden Datentypen sind z.B. nicht vergleichbar:
- Cursor
- image
- ntext
- text
- xml
Außerdem gehören auch benutzerdefinierte CLR-Typen (Common Language Runtime) zu den nicht vergleichbaren Datentypen.
expression
Ein Ausdruck beliebigen Typs. BINARY_CHECKSUM ignoriert in seiner Berechnung jeden Ausdruck, der einen nicht vergleichbaren Datentyp hat.
Rückgabetypen
int
Bemerkungen
Wird BINARY_CHECKSUM(*)
für eine beliebige Zeile einer Tabelle berechnet, gibt die Anweisung den gleichen Wert zurück, solange die Zeile nicht später geändert wird. BINARY_CHECKSUM
erfüllt die Eigenschaften einer Hashfunktion: Wenn es auf zwei beliebige Listen mit Ausdrücken angewendet wird, wird immer derselbe Wert zurückgegeben, falls die entsprechenden Elemente der beiden Listen vom gleichen Typ sind und bezüglich des Vergleichs mit dem Gleichheitsoperator (=) gleich sind. Bei dieser Definition werden die NULL-Werte eines angegebenen Typs bei einem Vergleich als gleiche Werte angesehen. Wenn sich einer der Werte in der Liste mit Ausdrücken ändert, ändert sich gewöhnlich auch die Prüfsumme des Ausdrucks. Diese Änderung ist jedoch nicht gewährleistet. Daher wird empfohlen, BINARY_CHECKSUM
nur zur Ermittlung von Änderungen der Daten zu verwenden, wenn Ihre Anwendung auch bei gelegentlich nicht ausgeführten Änderungen weiter ausgeführt werden kann. Sie sollten andernfalls in Betracht ziehen, stattdessen HASHBYTES
zu verwenden. Ist ein MD5-Hashalgorithmus angegeben, ist die Wahrscheinlichkeit, dass HASHBYTES
für zwei verschiedene Eingaben dasselbe Ergebnis zurückgibt, wesentlich geringer als bei der Verwendung von BINARY_CHECKSUM
.
BINARY_CHECKSUM
kann auf eine Liste von Ausdrücken angewendet werden und gibt den gleichen Wert für eine angegebene Liste zurück. Wenn BINARY_CHECKSUM
auf zwei beliebige Listen von Ausdrücken angewendet wird, wird stets der gleiche Wert zurückgegeben, wenn die entsprechenden Elemente der beiden Listen denselben Typ und dieselbe Bytedarstellung haben. Für diese Definition wird bei NULL-Werten eines angegebenen Datentyps angenommen, dass sie dieselbe Bytedarstellung haben.
BINARY_CHECKSUM
und CHECKSUM
sind ähnliche Funktionen. Sie können zur Berechnung eines Prüfsummenwerts für eine Liste mit Ausdrücken verwendet werden, wobei der berechnete Wert von der Reihenfolge der Ausdrücke abhängt. Die Spaltenreihenfolge, die bei BINARY_CHECKSUM(*)
verwendet wird, ist die Spaltenreihenfolge, die in der Tabellen- oder Sichtdefinition angegeben ist. Diese Reihenfolge die berechneten Spalten ein.
BINARY_CHECKSUM
und CHECKSUM
geben unterschiedliche Werte für die String-Datentypen zurück, bei denen aufgrund des Gebietsschemas unterschiedliche Repräsentationen als gleich betrachtet werden können. String-Datentypen sind z.B.:
- char
- nchar
- nvarchar
- varchar
oder
- sql_variant (wenn der Basistyp von sql_variant ein String-Datentyp ist).
Die BINARY_CHECKSUM
-Werte für die Zeichenfolgen „McCavity“ und „Mccavity“ sind z. B. unterschiedlich. Bei einem Server ohne Unterscheidung nach Groß-/Kleinschreibung gibt CHECKSUM
jedoch für diese Zeichenfolgen dieselben Prüfsummenwerte zurück. Sie sollten Vergleiche zwischen CHECKSUM
-Werten und BINARY_CHECKSUM
-Werten vermeiden.
BINARY_CHECKSUM
unterstützt für den Typ varbinary(max) beliebige Längen und bis zu 255 Zeichen für den Typ nvarchar(max).
Beispiele
Im folgenden Beispiel wird BINARY_CHECKSUM
verwendet, um Änderungen in einer Zeile einer Tabelle zu erkennen.
USE AdventureWorks2022;
GO
CREATE TABLE myTable (column1 INT, column2 VARCHAR(256));
GO
INSERT INTO myTable VALUES (1, 'test');
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
UPDATE myTable set column2 = 'TEST';
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
Weitere Informationen
Aggregatfunktionen (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
CHECKSUM (Transact-SQL)
HASHBYTES (Transact-SQL)