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

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics

CHECKSUM 関数は、テーブルの行または式のリストで計算されたチェックサム値を返します。The CHECKSUM function returns the checksum value computed over a table row, or over an expression list. CHECKSUM を使用して、ハッシュ インデックスを作成します。Use CHECKSUM to build hash indexes.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

注意

この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。This syntax is not supported by serverless SQL pool in Azure Synapse Analytics.

引数Arguments

*
この引数は、チェックサムの計算がすべてのテーブル列をカバーしていることを指定します。This argument specifies that the checksum computation covers all table columns. 列のいずれかが比較できないデータ型である場合、CHECKSUM ではエラーが返されます。CHECKSUM returns an error if any column has a noncomparable data type. 比較できないデータ型は次のとおりです。Noncomparable data types include:

  • cursorcursor
  • imageimage
  • ntextntext
  • texttext
  • XMLXML

比較できないデータ型には、これらのデータ型のいずれかを基本データ型とする sql_variant もあります。Another noncomparable data type is sql_variant with any one of the preceding data types as its base type.

式 (expression)expression
比較できないデータ型を除く、任意のデータ型のを指定します。An expression of any type, except a noncomparable data type.

戻り値の型Return types

intint

解説Remarks

CHECKSUM では、引数リストに対してハッシュ値 (チェックサム) が計算されます。CHECKSUM computes a hash value, called the checksum, over its argument list. このハッシュ値を使用して、ハッシュ インデックスを作成します。Use this hash value to build hash indexes. CHECKSUM 関数に列の引数があり、計算された CHECKSUM 値を基にインデックスを作成する場合、結果はハッシュ インデックスになります。A hash index will result if the CHECKSUM function has column arguments, and an index is built over the computed CHECKSUM value. このハッシュ インデックスは、列で等値検索を行うときに使用できます。This can be used for equality searches over the columns.

CHECKSUM はハッシュ関数のプロパティとなります。CHECKSUM を任意の 2 つの式のリストに適用した場合、その 2 つのリストに対応する要素のデータ型が同じで、等号 (=) 演算子により比較した場合にそれらの対応する要素が等しければ、同じ値が返されます。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. CHECKSUM 関数の目的のために、指定した型の NULL 値は等しいものとして比較されるように定義されます。Null values of a specified type are defined to compare as equal for CHECKSUM function purposes. 式リストのいずれかの値を変更した場合は、そのリストのチェックサムも変わります。If at least one of the values in the expression list changes, the list checksum will probably change. ただし、これは保証されません。However, this is not guaranteed. そのため、値が変更されたかどうかを検出する際には、アプリケーションが変更を検出できないことを許容できる場合のみ、CHECKSUM の使用をお勧めします。Therefore, to detect whether values have changed, we recommend use of CHECKSUM only if your application can tolerate an occasional missed change. それ以外の場合は、代わりに HASHBYTES の使用を検討してください。Otherwise, consider using HASHBYTES instead. MD5 ハッシュ アルゴリズムを指定した場合は、HASHBYTES から 2 つの異なる入力に対して同じ結果が返される可能性が 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.

式の順序は、計算される CHECKSUM 値に影響します。The expression order affects the computed CHECKSUM value. CHECKSUM(*) で使用される列の順序は、テーブルまたはビュー定義に指定された列の順序です。The order of columns used for CHECKSUM(*) is the order of columns specified in the table or view definition. これには、計算列が含まれます。This includes computed columns.

CHECKSUM 値は照合順序によって異なります。The CHECKSUM value depends on the collation. 異なる照合順序で保存された同じ値は別の CHECKSUM 値を返します。The same value stored with a different collation will return a different CHECKSUM value.

CHECKSUM () では、結果が一意になるとは限りません。CHECKSUM () does not guarantee unique results.

Examples

これらの例は、CHECKSUM を使用してハッシュ インデックスを作成する方法を示しています。These examples show the use of CHECKSUM to build hash indexes.

ハッシュ インデックスを作成するために、最初の例では、インデックスを作成するテーブルに計算されたチェックサム列を追加します。To build the hash index, the first example adds a computed checksum column to the table we want to index. 次に、チェックサム列にインデックスを構築します。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  

この例では、ハッシュ インデックスとしてチェックサム インデックスを使用することを示しています。This example shows the use of a checksum index as a hash index. これにより、インデックスを作成する列が長い文字列の場合は、インデックス作成速度を向上させるのに役立ちます。This can help improve indexing speed when the column to index is a long character column. チェックサム インデックスは、等値検索に使用できます。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  

計算列にインデックスを作成するとチェックサム列が具体化され、ProductName 値を変更すると、それがどのような変更であってもチェックサム列に反映されます。Index creation on the computed column materializes the checksum column, and any changes to the ProductName value will propagate to the checksum column. 代わりに、インデックスを作成する列に直接インデックスを作成することができます。Alternatively, we could build an index directly on the column we want to index. ただし、長いキー値の場合は、通常のインデックスはチェックサム インデックスと同様に機能しない可能性があります。However, for long key values, a regular index will probably not perform as well as a checksum index.

関連項目See also

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