Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa perbedaan antara CHECKSUM() dan BINARY_CHECKSUM() dan kapan/apa skenario penggunaan yang sesuai?

Lihat entri blog berikut yang menyoroti perbedaannya.

http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

Menambahkan info dari tautan ini:

Maksud utama dari fungsi CHECKSUM adalah untuk membangun indeks hash berdasarkan ekspresi atau daftar kolom. Jika Anda menggunakannya untuk menghitung dan menyimpan kolom di tingkat tabel untuk menunjukkan checksum di atas kolom yang membuat catatan unik dalam tabel, maka ini dapat membantu dalam menentukan apakah suatu baris telah berubah atau tidak. Mekanisme ini kemudian dapat digunakan sebagai ganti bergabung dengan semua kolom yang membuat catatan unik untuk melihat apakah catatan telah diperbarui atau tidak. SQL Server Books Online memiliki banyak contoh tentang fungsi ini.

Beberapa hal yang harus diperhatikan saat menggunakan fungsi ini:

Anda perlu memastikan bahwa kolom atau urutan ekspresi sama antara dua checksum yang dibandingkan jika tidak, nilainya akan berbeda dan akan menyebabkan masalah.

Kami tidak akan merekomendasikan menggunakan checksum(*) karena nilai yang akan dihasilkan dengan cara itu akan didasarkan pada urutan kolom dari definisi tabel saat run time yang dapat dengan mudah berubah selama periode waktu tertentu. Jadi, tentukan daftar kolom secara eksplisit.

Berhati-hatilah saat Anda menyertakan kolom tipe data datetime karena granularitasnya adalah 1/300 detik dan bahkan variasi kecil akan menghasilkan nilai checksum yang berbeda. Jadi, jika Anda harus menggunakan kolom tipe data datetime, pastikan Anda mendapatkan tanggal + jam/menit yang tepat. yaitu tingkat perincian yang Anda inginkan.

Ada tiga fungsi checksum yang tersedia untuk Anda:

CHECKSUM:Ini dijelaskan di atas.

CHECKSUM_AGG:Ini mengembalikan checksum nilai dalam grup dan nilai Null diabaikan dalam kasus ini. Ini juga berfungsi dengan klausa OVER fungsi analitik baru di SQL Server 2005.

BINARY_CHECKSUM:Seperti namanya, ini mengembalikan nilai checksum biner yang dihitung pada baris atau daftar ekspresi. Perbedaan antara CHECKSUM dan BINARY_CHECKSUM adalah nilai yang dihasilkan untuk tipe data string. Contoh dari perbedaan tersebut adalah nilai yang dihasilkan untuk "DECIPHER" dan "decipher" akan berbeda dalam kasus BINARY_CHECKSUM tetapi akan sama untuk fungsi CHECKSUM (dengan asumsi bahwa kita memiliki instalasi case-insensitive dari instance). Perbedaan lainnya adalah pada perbandingan ekspresi. BINARY_CHECKSUM() mengembalikan nilai yang sama jika elemen dari dua ekspresi memiliki tipe dan representasi byte yang sama. Jadi, “2Volvo Director 20” dan “3Volvo Director 30” akan menghasilkan nilai yang sama, namun fungsi CHECKSUM() mengevaluasi jenis serta membandingkan dua string dan jika keduanya sama, maka hanya nilai yang sama yang dikembalikan.

Example:
STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
------------------- ----------------------    -----------
2Volvo Director 20  -1356512636                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memulai GearHost untuk Pengembangan Database SQL Server

  2. Menghubungkan ke SQLServer 2005 dengan adodbapi

  3. Mengapa memilih klausa Top dapat menyebabkan biaya waktu yang lama?

  4. Apakah ada cara untuk mendapatkan hasil yang berbeda untuk kueri SQL yang sama jika datanya tetap sama?

  5. Hirarki di SQL server 2005 dengan XML