Bagikan melalui


BINARY_CHECKSUM (T-SQL)

Berlaku untuk:SQL ServerDatabase Azure SQLInstans Terkelola Azure SQLAzure Synapse AnalyticsTitik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Mengembalikan nilai checksum biner yang dihitung di atas baris tabel atau di atas daftar ekspresi.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Argumen

*

Menentukan bahwa komputasi mencakup semua kolom tabel. BINARY_CHECKSUM mengabaikan kolom tipe data yang tidak sebanding dalam perhitungannya. Jenis data yang tidak sebanding meliputi:

  • Kursor
  • gambar
  • ntext
  • text
  • xml
  • Jenis runtime bahasa umum (CLR) yang ditentukan pengguna yang tidak sebanding

expression

Ekspresi jenis apa pun. BINARY_CHECKSUM mengabaikan ekspresi tipe data yang tidak sebanding dalam komputasinya.

Tipe pengembalian

int

Keterangan

BINARY_CHECKSUM(*), dihitung pada baris tabel apa pun, mengembalikan nilai yang sama selama baris tidak dimodifikasi nanti. BINARY_CHECKSUM memenuhi properti fungsi hash: ketika diterapkan pada dua daftar ekspresi, itu mengembalikan nilai yang sama jika elemen yang sesuai dari dua daftar memiliki jenis yang sama dan sama jika dibandingkan menggunakan operator sama= ().

Untuk definisi ini, kami mengatakan bahwa nilai null, dari jenis tertentu, bandingkan sebagai nilai yang sama. Jika setidaknya salah satu nilai dalam daftar ekspresi berubah, checksum ekspresi juga dapat berubah. Namun, perubahan ini tidak dijamin, sehingga untuk mendeteksi apakah nilai telah berubah, Anda harus menggunakan BINARY_CHECKSUM hanya jika aplikasi Anda dapat mentolerir perubahan yang terlewat sesekali. Jika tidak, pertimbangkan untuk menggunakan HASHBYTES sebagai gantinya. Dengan algoritma hash MD5 yang ditentukan, probabilitas yang HASHBYTES mengembalikan hasil yang sama, untuk dua input yang berbeda, jauh lebih rendah daripada BINARY_CHECKSUM.

BINARY_CHECKSUM dapat beroperasi melalui daftar ekspresi, dan mengembalikan nilai yang sama untuk daftar yang ditentukan. BINARY_CHECKSUM diterapkan di atas dua daftar ekspresi mengembalikan nilai yang sama jika elemen yang sesuai dari dua daftar memiliki jenis dan representasi byte yang sama. Untuk definisi ini, nilai null dari jenis tertentu dianggap memiliki representasi byte yang sama.

BINARY_CHECKSUM dan CHECKSUM merupakan fungsi serupa. Mereka dapat digunakan untuk menghitung nilai checksum pada daftar ekspresi, dan urutan ekspresi memengaruhi nilai yang dihasilkan. Urutan kolom yang digunakan untuk BINARY_CHECKSUM(*) adalah urutan kolom yang ditentukan dalam tabel atau definisi tampilan. Pengurutan ini mencakup kolom komputasi.

BINARY_CHECKSUM dan CHECKSUM mengembalikan nilai yang berbeda untuk jenis data string, di mana lokal dapat menyebabkan string dengan representasi yang berbeda untuk dibandingkan sebagai sama. Jenis data string adalah:

  • Char
  • nchar
  • nvarchar
  • varchar
  • sql_variant (jika jenis dasar sql_variant adalah tipe data string)

Misalnya, string McCavity dan Mccavity memiliki nilai yang berbeda BINARY_CHECKSUM . Sebaliknya, untuk server yang tidak peka huruf besar/kecil, CHECKSUM mengembalikan nilai checksum yang sama untuk string tersebut. Anda harus menghindari perbandingan CHECKSUM nilai dengan BINARY_CHECKSUM nilai.

BINARY_CHECKSUM mendukung semua panjang jenis varbinary(max), dan hingga 255 karakter tipe nvarchar(n) / nvarchar(max).

Contoh

Contoh ini digunakan BINARY_CHECKSUM untuk mendeteksi perubahan dalam baris tabel.

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