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

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse noParallel Data Warehouse

Gibt den Prüfsummenwert zurück, der für eine Zeile einer Tabelle oder eine Liste mit Ausdrücken berechnet wurde.Returns the checksum value computed over a row of a table, or over a list of expressions. CHECKSUM wurde zum Verwenden beim Erstellen von Hashindizes konzipiert.CHECKSUM is intended for use in building hash indexes.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

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

ArgumenteArguments

*
Gibt an, dass die Berechnung für alle Spalten der Tabelle erfolgt.Specifies that computation is over all the columns of the table. CHECKSUM gibt einen Fehler zurück, wenn eine Spalte einen nicht vergleichbaren Datentyp hat.CHECKSUM returns an error if any column is of noncomparable data type. Nicht vergleichbare Datentypen sind text, ntext, image, XML und cursor sowie sql_variant mit einem der vorstehenden Typen als Basistyp.Noncomparable data types are text, ntext, image, XML, and cursor, and also sql_variant with any one of the preceding types as its base type.

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

RückgabetypenReturn types

intint

RemarksRemarks

CHECKSUM berechnet aus der Liste der Argumente einen Hashwert, der Prüfsumme genannt wird.CHECKSUM computes a hash value, called the checksum, over its list of arguments. Der Hashwert wurde zum Verwenden beim Erstellen von Hashindizes konzipiert.The hash value is intended for use in building hash indexes. Wenn die Argumente für CHECKSUM Spalten sind und ein Index für den berechneten CHECKSUM-Wert erstellt wird, ist das Ergebnis ein Hashindex.If the arguments to CHECKSUM are columns, and an index is built over the computed CHECKSUM value, the result is a hash index. Dieser kann für Gleichheitssuchen in den Spalten verwendet werden.This can be used for equality searches over the columns.

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 Typ sind und bezüglich des Vergleichs mit dem Gleichheitsoperator (=) gleich sind.CHECKSUM satisfies the properties of a hash function: CHECKSUM applied over any two lists of expressions returns the same value if the corresponding elements of the two lists have the same type and are equal when compared using the equals (=) operator. Bei dieser Definition wird für NULL-Werte eines angegebenen Typs angenommen, dass sie bei einem Vergleich "gleich" sind.For this definition, null values of a specified type are considered to compare as equal. Wenn sich einer der Werte in der Liste mit Ausdrücken ändert, ändert sich gewöhnlich auch die Prüfsumme der Liste.If one of the values in the expression list changes, the checksum of the list also generally changes. Es besteht jedoch eine geringe Möglichkeit, dass sich die Prüfsumme nicht ändert.However, there is a small chance that the checksum will not change. Aus diesem Grund wird nicht empfohlen, CHECKSUM für die Überprüfung auf geänderte Werte zu verwenden, außer es spielt für die Anwendung keine große Rolle, wenn gelegentlich eine Änderung nicht erkannt wird.For this reason, we do not recommend using CHECKSUM to detect whether values have changed, unless your application can tolerate occasionally missing a change. Verwenden Sie stattdessen lieber HashBytes.Consider using HashBytes instead. Wenn ein MD5-Hashalgorithmus angegeben wird, ist die Wahrscheinlichkeit, dass HashBytes für zwei verschiedene Eingaben dasselbe Ergebnis zurückgibt, wesentlich geringer als bei CHECKSUM.When an MD5 hash algorithm is specified, the probability of HashBytes returning the same result for two different inputs is much lower than that of CHECKSUM.

Die Reihenfolge von Ausdrücken wirkt sich auf den Ergebniswert für CHECKSUM aus.The order of expressions affects the resultant value of CHECKSUM. Die Spaltenreihenfolge, die bei CHECKSUM(*) verwendet wird, ist die Spaltenreihenfolge, die in der Tabellen- oder Sichtdefinition angegeben ist.The order of columns used with 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 Sortierung abhängig.The CHECKSUM value is dependent upon 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.

BeispieleExamples

In den folgenden Beispielen wird die Verwendung von CHECKSUM zum Erstellen von Hashindizes gezeigt.The following examples show using CHECKSUM to build hash indexes. Ein Hashindex wird erstellt, indem eine Spalte mit berechneten Prüfsummen zur indizierten Tabelle hinzugefügt wird und dann ein Index aus der Prüfsummenspalte erstellt wird.The hash index is built by adding a computed checksum column to the table being indexed, and then building 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  

Der Prüfsummenindex kann als Hashindex verwendet werden, insbesondere zur Erhöhung der Indizierungsgeschwindigkeit, wenn die Spalte, für die der Index erstellt werden soll, lange Zeichenfolgen enthält.The checksum index can be used as a hash index, particularly to improve indexing speed when the column to be indexed 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.Creating the index on the computed column materializes the checksum column, and any changes to the ProductName value will be propagated to the checksum column. Ein Index kann jedoch auch direkt für die indizierte Spalte erstellt werden.Alternatively, an index could be built directly on the column indexed. Wenn die Schlüsselwerte jedoch lang sind, ist ein normaler Index wahrscheinlich nicht so leistungsfähig wie ein Prüfsummenindex.However, if the key values are long, a regular index is not likely to perform as well as a checksum index.

Siehe auchSee also

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