OVH Cloud OVH Cloud

doublon : comment faire pour supprimer une ligne

4 réponses
Avatar
Elise G.
Bonjour,

J'ai récupérée une base corrompue. J'ai deux enregistrements totalement
identiques (meme clef primaire et contenu) dans une table.
Par exemple :
id lettre prenom
1 A Alfred
1 A Alfred
2 F Vincent

Je ne peux pas faire un delete car je n'ai aucun moyen de les séparer. J'ai
besoin de supprimer le doublon sans toucher à l'original. Comment puis-je
faire ?

Merci

4 réponses

Avatar
Steve Kass
Elise,

Une possibilité est d'ajouter une colonne discriminante:

alter table Elise add C uniqueidentifier default newid() with values
-- si [id] n'a pas la propriété identity,
-- alter table Elise add C int identity(1,1)

delete from Elise
where exists (
select * from Elise E
where E.id = Elise.id
and E.C< Elise.C
)

alter table Elise drop column C

On peut aussi utiliser une table auxiliare structurée comme la vôtre
(ici, Elise_bis):

insert into Elise_bis
select distinct id, lettre, prenom
from Elise

truncate table Elise

insert into Elise
select id, lettre, prenom
from Elise_bis

drop table Elise_bis

Si la colonne [id] a la propriéte IDENTITY, il faut SET IDENTITY_INSERT
ON lors des INSERT.

SK

Elise G. wrote:

Bonjour,

J'ai récupérée une base corrompue. J'ai deux enregistrements totalement
identiques (meme clef primaire et contenu) dans une table.
Par exemple :
id lettre prenom
1 A Alfred
1 A Alfred
2 F Vincent

Je ne peux pas faire un delete car je n'ai aucun moyen de les séparer. J'ai
besoin de supprimer le doublon sans toucher à l'original. Comment puis-je
faire ?

Merci







Avatar
Med Bouchenafa [MVP]
SET ROWCOUNT 1

DELETE FROM TableName WHERE id=1

SET ROWCOUNT 0

--
Salutations
Med Bouchenafa
TETRASET
75015 Paris
"Elise G." a écrit dans le message de news:

Bonjour,

J'ai récupérée une base corrompue. J'ai deux enregistrements totalement
identiques (meme clef primaire et contenu) dans une table.
Par exemple :
id lettre prenom
1 A Alfred
1 A Alfred
2 F Vincent

Je ne peux pas faire un delete car je n'ai aucun moyen de les séparer. J'ai
besoin de supprimer le doublon sans toucher à l'original. Comment puis-je
faire ?

Merci





Avatar
Steve Kass
Bravo, Med. J'ai lu "des enregistrements" -- avec "deux
enregistrements" SET ROWCOUNT est infiniment plus simple!

Steve



Med Bouchenafa [MVP] wrote:

SET ROWCOUNT 1

DELETE FROM TableName WHERE id=1

SET ROWCOUNT 0





Avatar
Elise G.
Merci beaucoup pour ces quelques lignes très efficaces.

Ca résous exactement mon probléme.

Mille fois mercis

Elise