BINARY_CHECKSUM (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
テーブルの 1 つの行、または一連の式に対して計算された、バイナリのチェックサム値を返します。
構文
BINARY_CHECKSUM ( * | expression [ ,...n ] )
Note
この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
引数
*
計算がすべてのテーブルの列に対して行われることを指定します。 BINARY_CHECKSUM の計算では、比較できないデータ型の列は無視されます。 比較できないデータ型は次のとおりです。
- cursor
- image
- ntext
- text
- xml
および比較できない共通言語ランタイム (CLR) ユーザー定義型です。
式 (expression)
任意のデータ型の式。 BINARY_CHECKSUM の計算では、比較できないデータ型の式は無視されます。
戻り値の型
int
解説
テーブルの任意の行で計算される BINARY_CHECKSUM(*)
では、行が後で変更されていない限り、同じ値が返されます。 BINARY_CHECKSUM
はハッシュ関数のプロパティに対応します。2 つの式のリストに適用した場合、2 つのリストの対応する要素のデータ型が同じであり、等号 (=) 演算子による比較で等価であれば、同じ値が返されます。 この定義では、指定した型が NULL 値であるとすると、等しい値として比較されます。 式リストのいずれかの値を変更した場合は、その式のチェックサムも変わります。 ただし、この変更は保証されていないため、値が変更されたかどうかを検出するには、アプリケーションが変更を検出できないことを許容できる場合のみ、BINARY_CHECKSUM
の使用をお勧めします。 それ以外の場合は、代わりに HASHBYTES
の使用を検討してください。 MD5 ハッシュ アルゴリズムを指定した場合は、HASHBYTES
から 2 つの異なる入力に対して同じ結果が返される可能性が BINARY_CHECKSUM
よりもはるかに低くなります。
BINARY_CHECKSUM
は式のリスト全体を処理でき、指定されたリストに対して同じ値を返します。 BINARY_CHECKSUM
を 2 つの式のリストに適用した場合、2 つのリストの対応する要素が同じ型と同じバイト表現であれば、同じ値が返されます。 この定義では、指定した型の値が NULL であった場合、これらの値は同じバイト表現として扱われます。
BINARY_CHECKSUM
と CHECKSUM
は類似する関数です。 式のリストにあるチェックサム値を計算するために使用でき、式の順序は結果となる値に影響します。 BINARY_CHECKSUM(*)
で使用される列の順序は、テーブルまたはビュー定義に指定された列の順序です。 この順序には、計算列が含まれます。
ロケールによっては、異なる表現の文字列が等しいとして比較される場合があります。このような場合、BINARY_CHECKSUM
と CHECKSUM
では文字列データ型に対して異なる値が返されます。 文字列データ型は次のとおりです。
- char
- nchar
- nvarchar
- varchar
or
- sql_variant (sql_variant の基本データ型が文字列データ型の場合)。
たとえば、文字列 "McCavity" と "Mccavity" の BINARY_CHECKSUM
値は異なります。 これに対し、大文字小文字が区別されないサーバーの場合、CHECKSUM
ではこれらの文字列に同じチェックサム値が返されます。 CHECKSUM
値と BINARY_CHECKSUM
値の比較は避ける必要があります。
BINARY_CHECKSUM
では、任意の長さの varbinary(max) 型の文字と、最大 255 文字の nvarchar(max) 型がサポートされます。
例
この例では、BINARY_CHECKSUM
を使用して、テーブル行の変更を検出します。
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
関連項目
集計関数 (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
CHECKSUM (Transact-SQL)
HASHBYTES (Transact-SQL)