Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự khác biệt giữa CHECKSUM () và BINARY_CHECKSUM () và khi nào / các trường hợp sử dụng thích hợp là gì?

Hãy xem bài đăng trên blog sau đây nêu bật các điểm khác biệt.

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

Thêm thông tin từ liên kết này:

Mục đích chính của hàm CHECKSUM là xây dựng chỉ mục băm dựa trên một biểu thức hoặc danh sách cột. Nếu giả sử bạn sử dụng nó để tính toán và lưu trữ một cột ở cấp bảng để biểu thị tổng kiểm tra trên các cột tạo một bản ghi duy nhất trong bảng, thì điều này có thể hữu ích trong việc xác định xem một hàng đã thay đổi hay chưa. Sau đó, cơ chế này có thể được sử dụng thay vì kết hợp với tất cả các cột tạo nên bản ghi duy nhất để xem liệu bản ghi đã được cập nhật hay chưa. SQL Server Books Online có rất nhiều ví dụ về phần chức năng này.

Một số điều cần lưu ý khi sử dụng các chức năng này:

Bạn cần đảm bảo rằng (các) cột hoặc thứ tự biểu thức giống nhau giữa hai tổng kiểm tra đang được so sánh nếu không giá trị sẽ khác và sẽ dẫn đến vấn đề.

Chúng tôi khuyên bạn không nên sử dụng tổng kiểm tra (*) vì giá trị sẽ được tạo theo cách đó sẽ dựa trên thứ tự cột của định nghĩa bảng tại thời điểm chạy có thể dễ dàng thay đổi trong một khoảng thời gian. Vì vậy, hãy xác định rõ ràng danh sách cột.

Hãy cẩn thận khi bạn bao gồm các cột kiểu dữ liệu ngày giờ vì mức độ chi tiết là 1/300 giây và ngay cả một biến thể nhỏ cũng sẽ dẫn đến một giá trị tổng kiểm tra khác. Vì vậy, nếu bạn phải sử dụng cột kiểu dữ liệu ngày giờ, hãy đảm bảo rằng bạn nhận được ngày + giờ / phút chính xác. tức là mức độ chi tiết mà bạn muốn.

Có ba hàm tổng kiểm tra có sẵn cho bạn:

CHECKSUM:Điều này đã được mô tả ở trên.

CHECKSUM_AGG:Điều này trả về tổng kiểm tra của các giá trị trong một nhóm và giá trị Null bị bỏ qua trong trường hợp này. Điều này cũng hoạt động với mệnh đề OVER của hàm phân tích mới trong SQL Server 2005.

BINARY_CHECKSUM:Như tên đã nêu, điều này trả về giá trị tổng kiểm tra nhị phân được tính trên một hàng hoặc danh sách các biểu thức. Sự khác biệt giữa CHECKSUM và BINARY_CHECKSUM là ở giá trị được tạo cho các kiểu dữ liệu chuỗi. Một ví dụ về sự khác biệt đó là các giá trị được tạo cho “DECIPHER” và “decipher” sẽ khác nhau trong trường hợp của BINARY_CHECKSUM nhưng sẽ giống nhau đối với hàm CHECKSUM (giả sử rằng chúng ta có cài đặt phiên bản không phân biệt chữ hoa chữ thường). Một sự khác biệt nữa là trong việc so sánh các biểu thức. BINARY_CHECKSUM () trả về cùng một giá trị nếu các phần tử của hai biểu thức có cùng kiểu và biểu diễn byte. Vì vậy, “2Volvo Director 20” và “3Volvo Director 30” sẽ mang lại cùng một giá trị, tuy nhiên, hàm CHECKSUM () đánh giá kiểu cũng như so sánh hai chuỗi và nếu chúng bằng nhau thì chỉ có cùng một giá trị được trả về.

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. Kỹ thuật hiện thực hóa CTE T-SQL không hoạt động trên SQL Server 2012

  2. cách bảo vệ cơ sở dữ liệu khỏi xác thực windows

  3. EF Code đầu tiên, làm thế nào để đăng ký cùng một tên bảng với các lược đồ khác nhau?

  4. Tôi không thể khởi động trình duyệt SQL Server

  5. 2 cách lấy thông tin phân vùng cho bảng trong SQL Server (T-SQL)