OVH Cloud OVH Cloud

[CD] - Recherche de doublons

3 réponses
Avatar
CD
Bonjour,

J'ai un logiciel qui scanne tous les eventlog des PC pour les enregistrer
dans une base SQL.
Mon problème est que parfois, le soft plante donc je dois le relancer et il
réenregistre les events donc création de doublons. Des doublons partiels
car lors du stokage d'un event dans sa base, il rajoute des informations lui
permettant de fonctionner, tel qu'un numéro d'enregistrement et un numéro
d'ID qui s'incrémentent automatiquement.

J'ai trouvé sur Internet un site qui explique des méthodes de suppression
des doublons
http://sql.developpez.com/doublons/

Mais cela bloque au niveau de la suppression !

DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)

Cette partie me génére une erreur :
Server: Msg 170, Level 15, State 1, Line 33
Line 33: Incorrect syntax near 'T'.

Voici le code complet

CREATE TABLE T_DOUBLON
(NUM INT,
NOM VARCHAR(32),
PRENOM VARCHAR(16))


INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (47, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (59, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (65, 'Dupond', 'Frédéric')
INSERT INTO T_DOUBLON VALUES (78, 'DUPOND', 'frédéric')
INSERT INTO T_DOUBLON VALUES (81, 'DUPOND', 'fréd')
INSERT INTO T_DOUBLON VALUES (99, 'DUPON', 'éric')


SELECT COUNT(*) AS NBR_DOUBLES, NUM, NOM, PRENOM
FROM T_DOUBLON
GROUP BY NUM, NOM, PRENOM
HAVING COUNT(*) > 1


ALTER TABLE T_DOUBLON
ADD COLUID uniqueidentifier


UPDATE T_DOUBLON
SET COLUID = newid()


DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)


ALTER TABLE T_DOUBLON
DROP COLUMN COLUID


Je vous remercie pour votre aide.

Cordialement,

CD

3 réponses

Avatar
Pascal Soveaux
"CD" wrote in message
news:%
Bonjour,

J'ai un logiciel qui scanne tous les eventlog des PC pour les enregistrer
dans une base SQL.
Mon problème est que parfois, le soft plante donc je dois le relancer et
il
réenregistre les events donc création de doublons. Des doublons partiels
car lors du stokage d'un event dans sa base, il rajoute des informations
lui
permettant de fonctionner, tel qu'un numéro d'enregistrement et un numéro
d'ID qui s'incrémentent automatiquement.

J'ai trouvé sur Internet un site qui explique des méthodes de suppression
des doublons
http://sql.developpez.com/doublons/

Mais cela bloque au niveau de la suppression !

DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)

Cette partie me génére une erreur :
Server: Msg 170, Level 15, State 1, Line 33
Line 33: Incorrect syntax near 'T'.

Voici le code complet

CREATE TABLE T_DOUBLON
(NUM INT,
NOM VARCHAR(32),
PRENOM VARCHAR(16))


INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (47, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (59, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (65, 'Dupond', 'Frédéric')
INSERT INTO T_DOUBLON VALUES (78, 'DUPOND', 'frédéric')
INSERT INTO T_DOUBLON VALUES (81, 'DUPOND', 'fréd')
INSERT INTO T_DOUBLON VALUES (99, 'DUPON', 'éric')


SELECT COUNT(*) AS NBR_DOUBLES, NUM, NOM, PRENOM
FROM T_DOUBLON
GROUP BY NUM, NOM, PRENOM
HAVING COUNT(*) > 1


ALTER TABLE T_DOUBLON
ADD COLUID uniqueidentifier


UPDATE T_DOUBLON
SET COLUID = newid()


DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)



DELETE T_DOUBLON
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT T2.COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)



ALTER TABLE T_DOUBLON
DROP COLUMN COLUID


Je vous remercie pour votre aide.

Cordialement,

CD




Pascal
Avatar
CD
Je vous remercie pour la réponse.
J'ai vraiment besoin d'apprendre.

CD

"Pascal Soveaux" a écrit dans le message de
news:

"CD" wrote in message
news:%
> Bonjour,
>
> J'ai un logiciel qui scanne tous les eventlog des PC pour les


enregistrer
> dans une base SQL.
> Mon problème est que parfois, le soft plante donc je dois le relancer et
> il
> réenregistre les events donc création de doublons. Des doublons


partiels
> car lors du stokage d'un event dans sa base, il rajoute des informations
> lui
> permettant de fonctionner, tel qu'un numéro d'enregistrement et un


numéro
> d'ID qui s'incrémentent automatiquement.
>
> J'ai trouvé sur Internet un site qui explique des méthodes de


suppression
> des doublons
> http://sql.developpez.com/doublons/
>
> Mais cela bloque au niveau de la suppression !
>
> DELETE
> FROM T_DOUBLON T
> WHERE T.COLUID > ANY
> (SELECT COLUID
> FROM T_DOUBLON T2
> WHERE T.COLUID <> T2.COLUID
> AND T.NUM = T2.NUM
> AND T.NOM = T2.NOM
> AND T.PRENOM = T2.PRENOM)
>
> Cette partie me génére une erreur :
> Server: Msg 170, Level 15, State 1, Line 33
> Line 33: Incorrect syntax near 'T'.
>
> Voici le code complet
>
> CREATE TABLE T_DOUBLON
> (NUM INT,
> NOM VARCHAR(32),
> PRENOM VARCHAR(16))
>
>
> INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
> INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
> INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
> INSERT INTO T_DOUBLON VALUES (47, 'DUPOND', 'alain')
> INSERT INTO T_DOUBLON VALUES (59, 'DUPOND', 'alain')
> INSERT INTO T_DOUBLON VALUES (65, 'Dupond', 'Frédéric')
> INSERT INTO T_DOUBLON VALUES (78, 'DUPOND', 'frédéric')
> INSERT INTO T_DOUBLON VALUES (81, 'DUPOND', 'fréd')
> INSERT INTO T_DOUBLON VALUES (99, 'DUPON', 'éric')
>
>
> SELECT COUNT(*) AS NBR_DOUBLES, NUM, NOM, PRENOM
> FROM T_DOUBLON
> GROUP BY NUM, NOM, PRENOM
> HAVING COUNT(*) > 1
>
>
> ALTER TABLE T_DOUBLON
> ADD COLUID uniqueidentifier
>
>
> UPDATE T_DOUBLON
> SET COLUID = newid()
>
>
> DELETE
> FROM T_DOUBLON T
> WHERE T.COLUID > ANY
> (SELECT COLUID
> FROM T_DOUBLON T2
> WHERE T.COLUID <> T2.COLUID
> AND T.NUM = T2.NUM
> AND T.NOM = T2.NOM
> AND T.PRENOM = T2.PRENOM)

DELETE T_DOUBLON
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT T2.COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)

>
>
> ALTER TABLE T_DOUBLON
> DROP COLUMN COLUID
>
>
> Je vous remercie pour votre aide.
>
> Cordialement,
>
> CD
>
>
Pascal




Avatar
Raymond Mercier
Bonjour,

Ci joint l'URL de LogManager, produit freeware que l'on développe :
http://lmcr.free.fr

Ce produit est chargé de faire la collecte de messages de log, et de les
archiver dans une base de données. Les bases de données supportées sont SQL
Server et MySQL.

De plus, et c'est pourquoi je répond au thread, il comporte un composant,
EventLog, qui s'installe sur une machine Microsoft pour la collecte et la
remontée des eventlog Microsoft.

LogManager team
Raymond

"CD" a écrit dans le message de news:
%
Bonjour,

J'ai un logiciel qui scanne tous les eventlog des PC pour les enregistrer
dans une base SQL.
Mon problème est que parfois, le soft plante donc je dois le relancer et
il
réenregistre les events donc création de doublons. Des doublons partiels
car lors du stokage d'un event dans sa base, il rajoute des informations
lui
permettant de fonctionner, tel qu'un numéro d'enregistrement et un numéro
d'ID qui s'incrémentent automatiquement.

J'ai trouvé sur Internet un site qui explique des méthodes de suppression
des doublons
http://sql.developpez.com/doublons/

Mais cela bloque au niveau de la suppression !

DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)

Cette partie me génére une erreur :
Server: Msg 170, Level 15, State 1, Line 33
Line 33: Incorrect syntax near 'T'.

Voici le code complet

CREATE TABLE T_DOUBLON
(NUM INT,
NOM VARCHAR(32),
PRENOM VARCHAR(16))


INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (33, 'DUPONT', 'marc')
INSERT INTO T_DOUBLON VALUES (47, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (59, 'DUPOND', 'alain')
INSERT INTO T_DOUBLON VALUES (65, 'Dupond', 'Frédéric')
INSERT INTO T_DOUBLON VALUES (78, 'DUPOND', 'frédéric')
INSERT INTO T_DOUBLON VALUES (81, 'DUPOND', 'fréd')
INSERT INTO T_DOUBLON VALUES (99, 'DUPON', 'éric')


SELECT COUNT(*) AS NBR_DOUBLES, NUM, NOM, PRENOM
FROM T_DOUBLON
GROUP BY NUM, NOM, PRENOM
HAVING COUNT(*) > 1


ALTER TABLE T_DOUBLON
ADD COLUID uniqueidentifier


UPDATE T_DOUBLON
SET COLUID = newid()


DELETE
FROM T_DOUBLON T
WHERE T.COLUID > ANY
(SELECT COLUID
FROM T_DOUBLON T2
WHERE T.COLUID <> T2.COLUID
AND T.NUM = T2.NUM
AND T.NOM = T2.NOM
AND T.PRENOM = T2.PRENOM)


ALTER TABLE T_DOUBLON
DROP COLUMN COLUID


Je vous remercie pour votre aide.

Cordialement,

CD