jaké jsou rozdíly mezi kontrolním součtem () a BINARY_CHECKSUM () a kdy / jaké jsou vhodné scénáře použití?
podívejte se na následující blogový příspěvek, který zdůrazňuje rozdíly.
CHECKSUM Functions in SQL Server 2005
přidání informací z tohoto odkazu:
klíčovým záměrem funkcí kontrolního součtu je vytvoření hash indexu založeného na výrazu nebo seznamu sloupců. Pokud řekněme, že budete používat to, aby vypočítat a uložit sloupec na úrovni tabulky k označení kontrolního součtu přes sloupce, které tvoří unikátní záznam v tabulce, pak to může být užitečné při určování, zda řádek byl změněn nebo ne. Tento mechanismus pak může být použit místo spojení s všechny sloupce, které tvoří záznam jedinečný a zjistit, zda záznam byl aktualizován nebo ne. SQL Server Books Online má mnoho příkladů této funkce.
pár věcí, na které je třeba dávat pozor při používání těchto funkcí:
Budete muset ujistěte se, že sloupec(y), nebo výraz, aby je stejná mezi dva kontrolní součty, které jsou oproti jiným hodnota bude jiná a bude vést k problémům.
nedoporučujeme používat kontrolní součet (*), protože hodnota, která bude takto generována, bude založena na pořadí sloupců definice tabulky v době běhu, které se může snadno měnit po určitou dobu. Takže explicitně Definujte seznam sloupců.
buďte opatrní, když zahrnete sloupce datového typu datetime, protože zrnitost je 1/300 sekundy a dokonce i malá odchylka bude mít za následek jinou hodnotu kontrolního součtu. Pokud tedy musíte použít sloupec datového typu datetime, ujistěte se, že získáte přesné datum + hodina/min. úroveň zrnitosti, kterou chcete.
máte k dispozici tři funkce kontrolního součtu:
kontrolní součet: toto bylo popsáno výše.
CHECKSUM_AGG: vrací kontrolní součet hodnot ve skupině a hodnoty Null jsou v tomto případě ignorovány. To také pracuje s nad klauzulí nové analytické funkce v SQL Server 2005.
BINARY_CHECKSUM: jak název uvádí, vrací se hodnota binárního kontrolního součtu vypočtená přes řádek nebo seznam výrazů. Rozdíl mezi kontrolním součtem a BINARY_CHECKSUM je v hodnotě generované pro datové typy řetězců. Příkladem takového rozdílu hodnoty vytvořené pro “DEŠIFROVAT” a “dešifrovat” se bude lišit v případě BINARY_CHECKSUM ale bude stejný pro kontrolní SOUČET funkce (za předpokladu, že máme malá a velká písmena instalace instance). Další rozdíl je ve srovnání výrazů. BINARY_CHECKSUM() vrací stejnou hodnotu, pokud mají prvky dvou výrazů stejný typ a reprezentaci bajtů. Takže, “2Volvo Ředitel 20” a “3Volvo Ředitel 30” přinese stejnou hodnotu, nicméně kontrolní SOUČET funkce() vyhodnocuje typ, stejně jako porovnává dva řetězce a pokud jsou stejné, pak jen stejnou hodnotu, je vrácena.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363