CHECKSUM (Transact-SQL)CHECKSUM (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse AnalyticsAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics

Die CHECKSUM-Funktion gibt den Prüfsummenwert zurück, der für eine Zeile einer Tabelle oder eine Liste mit Ausdrücken berechnet wurde.The CHECKSUM function returns the checksum value computed over a table row, or over an expression list. Verwenden Sie CHECKSUM, um Hashindizes zu erstellen.Use CHECKSUM to build hash indexes.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

CHECKSUM ( * | expression [ ,...n ] )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumenteArguments

*
Dieses Argument gibt an, dass die Berechnung der Prüfsumme für alle Tabellenspalten gilt.This argument specifies that the checksum computation covers all table columns. CHECKSUM gibt einen Fehler zurück, wenn eine Spalte einen nicht vergleichbaren Datentyp aufweist.CHECKSUM returns an error if any column has a noncomparable data type. Die folgenden Datentypen sind z.B. nicht vergleichbar:Noncomparable data types include:

  • Cursorcursor
  • imageimage
  • ntextntext
  • texttext
  • XMLXML

Ein weiterer nicht vergleichbarer Datentypen ist sql_variant mit einem der vorstehenden Typen als Basistyp.Another noncomparable data type is sql_variant with any one of the preceding data types as its base type.

expressionexpression
Ein Ausdruck eines beliebigen Typs mit Ausnahme eines nicht vergleichbaren Datentyps.An expression of any type, except a noncomparable data type.

RückgabetypenReturn types

intint

BemerkungenRemarks

CHECKSUM berechnet aus der Liste der Argumente einen Hashwert, der Prüfsumme genannt wird.CHECKSUM computes a hash value, called the checksum, over its argument list. Verwenden Sie diesen Hashwert zum Erstellen von Hashindizes.Use this hash value to build hash indexes. Wenn die CHECKSUM-Funktion Spaltenargumente aufweist, ist das Ergebnis ein Hashindex, und ein Index für den berechneten CHECKSUM-Wert wird erstellt.A hash index will result if the CHECKSUM function has column arguments, and an index is built over the computed CHECKSUM value. Dieser kann für Gleichheitssuchen in den Spalten verwendet werden.This can be used for equality searches over the columns.

Die Funktion CHECKSUM erfüllt die Eigenschaften einer Hashfunktion: Wenn CHECKSUM auf zwei beliebige Listen mit Ausdrücken angewendet wird, wird immer derselbe Wert zurückgegeben, falls die entsprechenden Elemente der beiden Listen vom gleichen Datentyp sind und bezüglich des Vergleichs mit dem Gleichheitsoperator (=) gleich sind.The CHECKSUM function satisfies hash function properties: CHECKSUM applied over any two lists of expressions will return the same value, if the corresponding elements of the two lists have the same data type, and if those corresponding elements have equality when compared using the equals (=) operator. NULL-Werte eines angegebenen Typs werden definiert, um zu prüfen, ob sie gleich sind (zu Zwecken der CHECKSUM-Funktion).Null values of a specified type are defined to compare as equal for CHECKSUM function purposes. Wenn sich einer der Werte in der Liste mit Ausdrücken ändert, ändert sich gewöhnlich auch die Prüfsumme der Liste.If at least one of the values in the expression list changes, the list checksum will probably change. Dies ist jedoch nicht immer der Fall.However, this is not guaranteed. Daher wird empfohlen, 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.Therefore, to detect whether values have changed, we recommend use of CHECKSUM only if your application can tolerate an occasional missed change. Sie sollten andernfalls in Betracht ziehen, stattdessen HASHBYTES zu verwenden.Otherwise, consider using HASHBYTES instead. Wenn ein MD5-Hashalgorithmus angegeben ist, ist die Wahrscheinlichkeit, dass HASHBYTES für zwei verschiedene Eingaben dasselbe Ergebnis zurückgibt, wesentlich geringer als bei der Verwendung von CHECKSUM.With a specified MD5 hash algorithm, the probability that HASHBYTES will return the same result, for two different inputs, is much lower compared to CHECKSUM.

Die Ausdrucksreihenfolge wirkt sich auf den berechneten CHECKSUM-Wert aus.The expression order affects the computed CHECKSUM value. Die Spaltenreihenfolge, die bei CHECKSUM(*) verwendet wird, ist die Spaltenreihenfolge, die in der Tabellen- oder Sichtdefinition angegeben ist.The order of columns used for CHECKSUM(*) is the order of columns specified in the table or view definition. Dies schließt die berechneten Spalten ein.This includes computed columns.

Der CHECKSUM-Wert ist von der Sortierung abhängig.The CHECKSUM value depends on the collation. Der gleiche Wert gibt einen anderen CHECKSUM-Wert zurück, wenn er mit einer anderen Sortierung gespeichert ist.The same value stored with a different collation will return a different CHECKSUM value.

CHECKSUM () garantiert keine eindeutigen Ergebnisse.CHECKSUM () does not guarantee unique results.

BeispieleExamples

In diesen Beispielen wird veranschaulicht, wie Sie mit CHECKSUM Hashindizes erstellen können.These examples show the use of CHECKSUM to build hash indexes.

Im ersten Beispiel wird eine Spalte für die berechnete Prüfsumme der zu indizierenden Tabelle hinzugefügt, um einen Hashindex zu erstellen.To build the hash index, the first example adds a computed checksum column to the table we want to index. Dann wird ein Index in der Prüfsummenspalte erstellt.It then builds an index on the checksum column.

-- Create a checksum index.  

SET ARITHABORT ON;  
USE AdventureWorks2012;   
GO  
ALTER TABLE Production.Product  
ADD cs_Pname AS CHECKSUM(Name);  
GO  
CREATE INDEX Pname_index ON Production.Product (cs_Pname);  
GO  

In diesem Beispiel wird veranschaulicht, wie der Prüfsummenindex als Hashindex verwendet werden kann.This example shows the use of a checksum index as a hash index. So verläuft die Indizierung schneller, wenn die zu indizierende Spalte eine Spalte mit langen Zeichen ist.This can help improve indexing speed when the column to index is a long character column. Der Prüfsummenindex kann für die Gleichheitssuche verwendet werden.The checksum index can be used for equality searches.

/*Use the index in a SELECT query. Add a second search   
condition to catch stray cases where checksums match,   
but the values are not the same.*/  

SELECT *   
FROM Production.Product  
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname  
AND Name = N'Bearing Ball';  
GO  

Durch Erstellen des Indexes für die berechnete Spalte wird die Prüfsummenspalte materialisiert, und die Änderungen des ProductName-Werts werden an die Prüfsummenspalte weitergegeben.Index creation on the computed column materializes the checksum column, and any changes to the ProductName value will propagate to the checksum column. Alternativ können Sie einen Index direkt in der zu indizierenden Spalte erstellen.Alternatively, we could build an index directly on the column we want to index. Bei langen Schlüsselwerten ist die Leistung eines normales Indexes wahrscheinlich geringer als die eines Prüfsummenindexes.However, for long key values, a regular index will probably not perform as well as a checksum index.

Weitere InformationenSee also

CHECKSUM_AGG (Transact-SQL)CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)BINARY_CHECKSUM (Transact-SQL)