[2019] Avis sur une méthode de calcul de Hash unique
Bonjour,
Alors voilà j'ai besoin de calculé un Hash SHA1 pour chaque record de chaque table qui va servir d'identifiant.
Ce hash est calculé sur certaines colonnes des tables pas toujours les mêmes d'une table à l'autre.
En revanche la chaine hashée doit avoir un format très précis pour évité les duplicats.
Du coup il est important que son calcul ne soit qu'a un seul endroit pour être certain qu'il est le même d'un dev à l'autre, régénérable, maintenable, etc...
Bref, quels seraient vos idées / propositions pour ce problème ?
A suivre quelques précisions
- Oui je sais que les hash ont un risque de créer des doublons. Mais tellement infime que ce risque est ignoré.
- J'utilise un Hash plutôt qu'un GUID pour qu'il puisse être connu a l'avance et régénérable.
- J'ai essayer d'utiliser les fonction de Hash de sql serveur, mais comme les paramètres doivent être fixe, c'est compliqué.
Enfin la solution actuellement implémentée qui ne satisfait pas complétement
Nous avons créé une CLR qui prendre un nombre variable de SQLVariant en paramètres.
La CLR fait parfaitement le travail mais pose les problèmes suivants :
- Les [n]Varchar(MAX) ne fonctionnent pas car ne peuvent pas être converti en SQL variant.
- Les CLR ont un nombre de paramètres défini, j'ai du donc créé une SP pour chaque nombre de paramètres.
- Dans les requêtes simples ça va très vite mais dés que c'est un peu compliqué l'Optimiseur pète un câble et une requête de 20 secondes passe à 1h. Un work around à ce dernier point est de stocker les hashs calculés dans une table temporaire puis d'utiliser cette dernière dans la requête complexe.