Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какви са разликите между CHECKSUM() и BINARY_CHECKSUM() и кога/какви са подходящите сценарии за използване?

Вижте следната публикация в блога, която подчертава разликите.

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

Добавяне на информация от тази връзка:

Основното предназначение на функциите CHECKSUM е да се изгради хеш индекс въз основа на израз или списък с колони. Ако кажем, че го използвате за изчисляване и съхраняване на колона на ниво таблица, за да обозначите контролната сума над колоните, които правят записа уникален в таблица, тогава това може да бъде полезно при определяне дали даден ред е променен или не. След това този механизъм може да се използва вместо обединяване с всички колони, които правят записа уникален, за да видите дали записът е актуализиран или не. SQL Server Books Online има много примери за тази част от функционалността.

Няколко неща, за които да внимавате, когато използвате тези функции:

Трябва да се уверите, че редът на колоните или изразите е еднакъв между двете контролни суми, които се сравняват, в противен случай стойността ще бъде различна и ще доведе до проблеми.

Не бихме препоръчали използването на контролна сума(*), тъй като стойността, която ще се генерира по този начин, ще се основава на реда на колоните на дефиницията на таблицата по време на изпълнение, което може лесно да се промени за определен период от време. Така че, изрично дефинирайте списъка с колони.

Бъдете внимателни, когато включвате колоните тип данни за дата и час, тъй като детайлността е 1/300 от секундата и дори малка вариация ще доведе до различна стойност на контролната сума. Така че, ако трябва да използвате колона тип данни за дата и час, тогава се уверете, че получавате точната дата + час/мин. т.е. нивото на детайлност, което желаете.

Налични са три функции за контролна сума:

КОНТРОЛНА СУМА:Това беше описано по-горе.

CHECKSUM_AGG:Това връща контролната сума на стойностите в група и нулевите стойности се игнорират в този случай. Това работи и с клаузата OVER на новата аналитична функция в SQL Server 2005.

BINARY_CHECKSUM:Както гласи името, това връща стойността на двоичната контролна сума, изчислена върху ред или списък с изрази. Разликата между CHECKSUM и BINARY_CHECKSUM е в стойността, генерирана за низовите типове данни. Пример за такава разлика е, че стойностите, генерирани за „DECIPHER“ и „decipher“, ще бъдат различни в случай на BINARY_CHECKSUM, но ще бъдат същите за функцията CHECKSUM (ако приемем, че имаме инсталация на екземпляра, която не е чувствителна към главни и малки букви). Друга разлика е в сравнението на изразите. BINARY_CHECKSUM() връща същата стойност, ако елементите на два израза имат един и същи тип и байтово представяне. И така, „2Volvo Director 20“ и „3Volvo Director 30“ ще дадат една и съща стойност, но функцията CHECKSUM() оценява типа, както и сравнява двата низа и ако са равни, тогава се връща само същата стойност.

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. Използване на SQL Server Express 2008 с база данни на SQL Server 2005 - как да проверите за съвместимост

  2. MySQL - Значение на ПЪРВИЧЕН КЛЮЧ, УНИКАЛЕН КЛЮЧ и КЛЮЧ, когато се използват заедно при създаване на таблица

  3. Внедряване на общ индикатор за производителност на MS SQL Server

  4. Crystal Report показва HTML текст, но водещите символи не се показват. Защо?

  5. Автоматично премахване и повторно създаване на текущи индекси