Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

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.

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

Ajout d'informations à partir de ce lien :

L'objectif principal des fonctions CHECKSUM est de créer un index de hachage basé sur une expression ou une liste de colonnes. Si 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 alors être utilisé au lieu de joindre toutes les colonnes qui rendent l'enregistrement unique pour voir si l'enregistrement a été mis à jour ou non. La documentation en ligne de SQL Server contient de nombreux exemples de cette fonctionnalité.

Quelques points à 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 la somme de contrôle (*) car la valeur qui sera générée de cette manière sera basée sur l'ordre des colonnes de la définition de table au moment de l'exécution, qui peut facilement changer sur une période de temps. Alors, 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 entraînera 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 sont à votre disposition :

CHECKSUM :Ceci a été décrit ci-dessus.

CHECKSUM_AGG :cela renvoie la somme de contrôle des valeurs d'un groupe et les valeurs nulles 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 son nom l'indique, cela renvoie la valeur de la 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 avons 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 et compare les deux chaînes et si elles sont égales, seule la même valeur est renvoyée.

Example:
STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
------------------- ----------------------    -----------
2Volvo Director 20  -1356512636                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363