共用方式為


BINARY_CHECKSUM(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉庫Microsoft Fabric 中的 SQL 資料庫

傳回針對一份資料表的某個資料列或一份運算式清單,來計算的二進位總和檢查碼值。

Transact-SQL 語法慣例

Syntax

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

注意

Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

引數

*

指定計算涵蓋所有資料表資料行。 BINARY_CHECKSUM 在計算過程中忽略不可比較資料類型的欄位。 不可比較的資料型態包括:

  • cursor
  • image
  • ntext
  • text
  • xml
  • 非可比較通用語言執行時(CLR)使用者定義型別

expression

任意類型的運算式BINARY_CHECKSUM 在計算時忽略不可比較資料型態的表達式。

傳回類型

int

備註

只要稍後不修改資料列,對資料表任何資料列執行計算的 BINARY_CHECKSUM(*) 就會傳回相同值。 BINARY_CHECKSUM 滿足雜湊函數的性質:當應用於任意兩個表達式列表時,若兩個列表對應元素類型相同且使用等=值()運算子比較時相等,則回傳相同值。

在此定義中,假設所指定類型的 Null 值比較為相等值。 如果運算式清單中至少有一個值變更,則運算式總和檢查碼也會變更。 然而,這種變動並非必然發生,因此要偵測值是否改變,應僅在應用程式能容忍偶爾遺漏變更時使用 BINARY_CHECKSUM 。 否則,請考慮改用 HASHBYTES。 使用指定的MD5雜湊演算法,兩個不同輸入中回 HASHBYTES 傳相同結果的機率遠低於 BINARY_CHECKSUM

BINARY_CHECKSUM 可以對運算式清單進行操作,而它會針對指定的清單傳回相同的值。 套用於任兩個運算式清單的 BINARY_CHECKSUM,如果這兩個清單的對應元素具有相同的類型和位元組表示法,則會傳回相同的值。 對這項定義而言,指定類型的 Null 值會被視為具有相同位元組表示法。

BINARY_CHECKSUMCHECKSUM 為類似的函數。 它們可用來計算運算式清單的總和檢查碼值,而運算式的順序會影響結果值。 用於 BINARY_CHECKSUM(*) 的資料行順序,就是資料表或檢視定義中所指定的資料行順序。 這項排序包含計算資料行。

BINARY_CHECKSUMCHECKSUM 所傳回的字串資料類型值不同,其中地區設定會造成不同表示法的字串比較為相等。 字串資料類型如下:

  • char
  • nchar
  • nvarchar
  • varchar
  • sql_variant (如果 sql_variant 的基礎型態是字串資料型態)

例如,字串 McCavityMccavity 有不同的 BINARY_CHECKSUM 值。 反之,在不區分大小寫的伺服器中,CHECKSUM 就會針對那些字串傳回相同的總和檢查碼值。 您應該避免比較 CHECKSUM 值與 BINARY_CHECKSUM 值。

BINARY_CHECKSUM 支援任意長度的 變數值(max),以及最多 255 個 nvarchar(n / 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