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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 ?
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
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
SET ROWCOUNT 1
DELETE FROM TableName WHERE id=1
SET ROWCOUNT 0
--
Salutations
Med Bouchenafa
TETRASET
75015 Paris
"Elise G." <GarcimoreElise@bradery.com> a écrit dans le message de news:
e88VGeyvDHA.1272@TK2MSFTNGP12.phx.gbl...
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 ?
-- 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
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
Bravo, Med. J'ai lu "des enregistrements" -- avec "deux
enregistrements" SET ROWCOUNT est infiniment plus simple!