jakie są różnice między CHECKSUM () i BINARY_CHECKSUM () i kiedy / jakie są odpowiednie scenariusze użycia?
sprawdź poniższy wpis na blogu, który podkreśla różnice.
CHECKSUM Functions in SQL Server 2005
dodanie informacji z tego linku:
kluczową intencją funkcji sumy kontrolnej jest zbudowanie indeksu skrótu na podstawie wyrażenia lub listy kolumn. Jeśli użyjesz go do obliczenia i przechowywania kolumny na poziomie tabeli w celu oznaczenia sumy kontrolnej nad kolumnami, które sprawiają, że rekord jest unikalny w tabeli, może to być pomocne w określeniu, czy wiersz się zmienił, czy nie. Ten mechanizm może być następnie użyty zamiast łączenia ze wszystkimi kolumnami, które sprawiają, że rekord jest unikalny, aby sprawdzić, czy rekord został zaktualizowany, czy nie. SQL Server Books Online ma wiele przykładów na ten element funkcjonalności.
kilka rzeczy, na które należy zwrócić uwagę podczas korzystania z tych funkcji:
musisz upewnić się, że kolejność kolumn lub wyrażeń jest taka sama między dwiema sumami kontrolnymi, które są porównywane, w przeciwnym razie wartość byłaby inna i doprowadziłaby do problemów.
nie zalecamy używania sumy kontrolnej (*), ponieważ wartość, która zostanie wygenerowana w ten sposób, będzie oparta na kolejności kolumn definicji tabeli w czasie wykonywania, która może się łatwo zmieniać w pewnym okresie czasu. Tak więc, jawnie zdefiniuj listę kolumn.
uważaj, gdy dołączasz kolumny typu danych datetime, ponieważ ziarnistość wynosi 1/300 sekundy, a nawet niewielka zmiana spowoduje inną wartość sumy kontrolnej. Tak więc, jeśli musisz użyć kolumny typu danych datetime, upewnij się, że otrzymasz dokładną datę + godzinę/min. tj. poziom ziarnistości, który chcesz.
dostępne są trzy funkcje sumy kontrolnej:
suma kontrolna: to zostało opisane powyżej.
suma KONTROLNA_AGG: Zwraca sumę kontrolną wartości w grupie i w tym przypadku wartości Null są ignorowane. Działa to również z klauzulą OVER nowej funkcji analitycznej w SQL Server 2005.
BINARY_CHECKSUM: zgodnie z nazwą Zwraca wartość binarnej sumy kontrolnej obliczonej na wierszu lub na liście wyrażeń. Różnica między sumą kontrolną a wartością BINARY_CHECKSUM jest wartością wygenerowaną dla typów danych typu string. Przykładem takiej różnicy jest to, że wartości generowane dla “DECIPHER” i “decipher” będą różne w przypadku BINARY_CHECKSUM, ale będą takie same dla funkcji sumy kontrolnej (zakładając, że instalacja instancji jest niewrażliwa na wielkość liter). Inną różnicą jest porównanie wyrażeń. BINARY_CHECKSUM() zwraca tę samą wartość, jeśli elementy dwóch wyrażeń mają ten sam typ i reprezentację bajtów. Tak więc, “2volvo Director 20” i “3volvo Director 30” dadzą tę samą wartość, jednak funkcja CHECKSUM() ocenia typ, a także porównuje oba łańcuchy i jeśli są równe, to zwracana jest tylko ta sama wartość.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363