Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

checksum

4 réponses
Avatar
Christophe
bonjour,

j'ai une table avec des personnes, sur laquelle je dois comparer les champs
suivants :
nom
prenom
adresse3
code postal
ville

la table comporte 1 million de lignes.
Pour gagner du temps j'ai donc creer une champ integer.
suivant

checksum( isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'') +
isnull(CP,'') + isnull(ville,'') )
se qui me donne un integer bien plus simple et rapide à comparer.
seulement voila j'ai plusieurs fois le meme numero pour des personnes qui
n'ont rien à voir entre elle.
bien sur cela me creer de grave problemes d'affectation.


est-ce que je suis parti dans la mauvaise direction ?
qu'utiliseriez vous comme methode pour repondre à mon besoin ?
y'a t'il des limitation à la fonction checksum ?


Merci par avance !
Ch.

4 réponses

Avatar
Fred BROUARD
Christophe a écrit :
bonjour,

j'ai une table avec des personnes, sur laquelle je dois comparer les
champs suivants :
nom
prenom
adresse3
code postal
ville

la table comporte 1 million de lignes.
Pour gagner du temps j'ai donc creer une champ integer.
suivant

checksum( isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'') +
isnull(CP,'') + isnull(ville,'') )
se qui me donne un integer bien plus simple et rapide à comparer.
seulement voila j'ai plusieurs fois le meme numero pour des personnes
qui n'ont rien à voir entre elle.
bien sur cela me creer de grave problemes d'affectation.


est-ce que je suis parti dans la mauvaise direction ?
qu'utiliseriez vous comme methode pour repondre à mon besoin ?
y'a t'il des limitation à la fonction checksum ?




Checksum ne garantie pas l'unicité sur des chaînes très longues.

Mais vous pouvez quand même ce faire en ajoutant le double contrôle :


SELECT *
FROM
(
SELECT *
FROM MaTable
WHERE MonCheckSum = 5623131321
) T
WHERE nom = 'toto'
AND prenom = 'marcel'
AND ...

A +



Merci par avance !
Ch.







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Christophe
Merde c'est pas cool ce que tu me dis la, ca doit venir de la le probleme,
ou j'ai des doublons de checksum alors que ces personnes non strictement
rien à voir !

quelles autres methode je pourrais utiliser ? car le probleme c'est que
confronter quelques milliers de ligne à plus d'un million ca prends quand
meme un certain temps et j'aurais le cas tres prochainement pour des bases
bien plus lourde !
4 millions sur 20 millions !!

cette solution m'avait bien plus.


"Fred BROUARD" a écrit dans le message de
news:
Christophe a écrit :
bonjour,

j'ai une table avec des personnes, sur laquelle je dois comparer les
champs suivants :
nom
prenom
adresse3
code postal
ville

la table comporte 1 million de lignes.
Pour gagner du temps j'ai donc creer une champ integer.
suivant

checksum( isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'') +
isnull(CP,'') + isnull(ville,'') )
se qui me donne un integer bien plus simple et rapide à comparer.
seulement voila j'ai plusieurs fois le meme numero pour des personnes qui
n'ont rien à voir entre elle.
bien sur cela me creer de grave problemes d'affectation.


est-ce que je suis parti dans la mauvaise direction ?
qu'utiliseriez vous comme methode pour repondre à mon besoin ?
y'a t'il des limitation à la fonction checksum ?




Checksum ne garantie pas l'unicité sur des chaînes très longues.

Mais vous pouvez quand même ce faire en ajoutant le double contrôle :


SELECT *
FROM
(
SELECT *
FROM MaTable
WHERE MonCheckSum = 5623131321
) T
WHERE nom = 'toto'
AND prenom = 'marcel'
AND ...

A +



Merci par avance !
Ch.







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************


Avatar
Fr
Bonjour,

Peut-être que un hashage MD5 en lieu et place du checksum ferai l'affaire...
par contre cela est plus lourd à stocker et certaiement plus long à calculer
qu'un checksum (à vérifier)

declare @s nvarchar(4000)
Set @s=isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'') +
isnull(CP,'') + isnull(ville,'')

puis stocker le résultat de HashBytes('MD5', @s) dans une colonne varchar




"Christophe" wrote in message
news:
bonjour,

j'ai une table avec des personnes, sur laquelle je dois comparer les
champs suivants :
nom
prenom
adresse3
code postal
ville

la table comporte 1 million de lignes.
Pour gagner du temps j'ai donc creer une champ integer.
suivant

checksum( isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'') +
isnull(CP,'') + isnull(ville,'') )
se qui me donne un integer bien plus simple et rapide à comparer.
seulement voila j'ai plusieurs fois le meme numero pour des personnes qui
n'ont rien à voir entre elle.
bien sur cela me creer de grave problemes d'affectation.


est-ce que je suis parti dans la mauvaise direction ?
qu'utiliseriez vous comme methode pour repondre à mon besoin ?
y'a t'il des limitation à la fonction checksum ?


Merci par avance !
Ch.





Avatar
Fred BROUARD
Christophe a écrit :
Merde c'est pas cool ce que tu me dis la, ca doit venir de la le probleme,
ou j'ai des doublons de checksum alors que ces personnes non strictement
rien à voir !

quelles autres methode je pourrais utiliser ? car le probleme c'est que
confronter quelques milliers de ligne à plus d'un million ca prends quand
meme un certain temps et j'aurais le cas tres prochainement pour des bases
bien plus lourde !
4 millions sur 20 millions !!



la requête que je vous ais donné va parfaitement fonctionner.

A +


cette solution m'avait bien plus.


"Fred BROUARD" a écrit dans le message de
news:
Christophe a écrit :
bonjour,

j'ai une table avec des personnes, sur laquelle je dois comparer les
champs suivants :
nom
prenom
adresse3
code postal
ville

la table comporte 1 million de lignes.
Pour gagner du temps j'ai donc creer une champ integer.
suivant

checksum( isnull(nom,'') + isnull(prenom,'') + isnull(adresse3,'')
+ isnull(CP,'') + isnull(ville,'') )
se qui me donne un integer bien plus simple et rapide à comparer.
seulement voila j'ai plusieurs fois le meme numero pour des personnes
qui n'ont rien à voir entre elle.
bien sur cela me creer de grave problemes d'affectation.


est-ce que je suis parti dans la mauvaise direction ?
qu'utiliseriez vous comme methode pour repondre à mon besoin ?
y'a t'il des limitation à la fonction checksum ?




Checksum ne garantie pas l'unicité sur des chaînes très longues.

Mais vous pouvez quand même ce faire en ajoutant le double contrôle :


SELECT *
FROM
(
SELECT *
FROM MaTable
WHERE MonCheckSum = 5623131321
) T
WHERE nom = 'toto'
AND prenom = 'marcel'
AND ...

A +



Merci par avance !
Ch.







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************