適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric
中的 SQL 分析端點Microsoft Fabric
中的倉庫Microsoft Fabric 中的 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_CHECKSUM 和 CHECKSUM 為類似的函數。 它們可用來計算運算式清單的總和檢查碼值,而運算式的順序會影響結果值。 用於 BINARY_CHECKSUM(*) 的資料行順序,就是資料表或檢視定義中所指定的資料行順序。 這項排序包含計算資料行。
BINARY_CHECKSUM 和 CHECKSUM 所傳回的字串資料類型值不同,其中地區設定會造成不同表示法的字串比較為相等。 字串資料類型如下:
- char
- nchar
- nvarchar
- varchar
- sql_variant (如果 sql_variant 的基礎型態是字串資料型態)
例如,字串 McCavity 和 Mccavity 有不同的 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