Quelles sont les différences entre CHECKSUM() et BINARY_CHECKSUM() et quand / quels sont les scénarios d’utilisation appropriés?
Consultez le billet de blog suivant qui met en évidence les différences.
CHECKSUM Functions in SQL Server 2005
Ajout d’informations à partir de ce lien:
L’intention principale des fonctions de SOMME de CONTRÔLE est de créer un index de hachage basé sur une expression ou une liste de colonnes. Si, par exemple, vous l’utilisez pour calculer et stocker une colonne au niveau de la table pour indiquer la somme de contrôle sur les colonnes qui rendent un enregistrement unique dans une table, cela peut être utile pour déterminer si une ligne a changé ou non. Ce mécanisme peut ensuite être utilisé au lieu de se joindre à toutes les colonnes qui rendent l’enregistrement unique pour voir si l’enregistrement a été mis à jour ou non. SQL Server Books Online a beaucoup d’exemples sur cette fonctionnalité.
Quelques éléments à surveiller lors de l’utilisation de ces fonctions:
Vous devez vous assurer que la ou les colonnes ou l’ordre des expressions sont les mêmes entre les deux sommes de contrôle comparées, sinon la valeur serait différente et entraînerait des problèmes.
Nous ne recommandons pas d’utiliser checksum(*) car la valeur qui sera générée de cette façon sera basée sur l’ordre des colonnes de la définition de la table au moment de l’exécution qui peut facilement changer sur une période de temps. Donc, définissez explicitement la liste des colonnes.
Soyez prudent lorsque vous incluez les colonnes de type de données datetime, car la granularité est de 1 / 300e de seconde et même une petite variation se traduira par une valeur de somme de contrôle différente. Donc, si vous devez utiliser une colonne de type de données datetime, assurez-vous d’obtenir la date exacte + heure / min. c’est-à-dire le niveau de granularité que vous souhaitez.
Trois fonctions de somme de contrôle s’offrent à vous :
SOMME de contrôle : Ceci a été décrit ci-dessus.
CHECKSUM_AGG : Renvoie la somme de contrôle des valeurs d’un groupe et les valeurs Null sont ignorées dans ce cas. Cela fonctionne également avec la clause OVER de la nouvelle fonction analytique dans SQL Server 2005.
BINARY_CHECKSUM: Comme l’indique le nom, cela renvoie la valeur de somme de contrôle binaire calculée sur une ligne ou une liste d’expressions. La différence entre CHECKSUM et BINARY_CHECKSUM réside dans la valeur générée pour les types de données de chaîne. Un exemple d’une telle différence est que les valeurs générées pour “DECIPHER” et “decipher” seront différentes dans le cas d’un BINARY_CHECKSUM mais seront les mêmes pour la fonction CHECKSUM (en supposant que nous ayons une installation insensible à la casse de l’instance). Une autre différence réside dans la comparaison des expressions. BINARY_CHECKSUM() renvoie la même valeur si les éléments de deux expressions ont le même type et la même représentation en octets. Ainsi, “2Volvo Director 20” et “3Volvo Director 30” donneront la même valeur, mais la fonction CHECKSUM() évalue le type ainsi que compare les deux chaînes et si elles sont égales, alors seule la même valeur est renvoyée.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363