分享方式:


BINARY_CHECKSUM (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲

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

Transact-SQL 語法慣例

Syntax

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

注意

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

引數

*
指定計算涵蓋所有資料表資料行。 BINARY_CHECKSUM 忽略其計算中無法比較之資料類型的資料行。 無法比較的資料類型包含

  • cursor
  • image
  • ntext
  • text
  • xml

和無法比較的 Common Language Runtime (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 的基底類型是字串資料類型)。

例如,"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)