SQL Server 2000, pb de doublons

Fidoudou Messages postés 11 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 16 janvier 2005 - 26 août 2004 à 09:07
gaa179 Messages postés 361 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 12 novembre 2009 - 27 août 2004 à 14:19
Bonjour à tous,

J'aurai voulu savoir quel était le moyen le plus simple pour éliminer des doublons dans une table d'une BDD SQL Server 2000.

Y a t-il possibilité de le faire avec une procédure stockée et comment ?

Merci

1 réponse

gaa179 Messages postés 361 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 12 novembre 2009 2
27 août 2004 à 14:19
Salut,

C'est possible. Tu dois créer des cursors.
Le premier pour séléctionner tes records doubles. Tu balaye les records dans ton cursor et pour chaque valeur tu crée un nouveau cursor comprenant tous les records correspondant à ta clef de double. Tu passe le premier record de ce cursor et tu efface tous les suivants.

Voilà la syntaxe:

-- Declaration des variables
DECLARE @Client integer, @KE varchar(1), @DN varchar(1), @CI varchar(1)

-- Déclarations du cursor contenant les doubles
DECLARE tdouble CURSOR
For
Select CIMP_ClientReferenceNumber, CIMP_KindOfEnergy, CIMP_DeliveryNumBer, CIMP_CounterIdentification
from TmpCounter
Group By CIMP_ClientReferenceNumber, CIMP_KindOfEnergy, CIMP_DeliveryNumBer, CIMP_CounterIdentification
having count(*) > 1

-- Ouverture du curseur
OPEN tdouble

FETCH NEXT FROM tdouble into @client, @KE, @DN, @CI
WHILE @@FETCH_STATUS = 0
BEGIN
--Declaration du cursor contenant tous les records de même que le rec double
DECLARE Rec CURSOR
FOR Select * from Counter where CIMP_ClientReferenceNumber = @Client AND CIMP_KindOfEnergy @KE AND CIMP_DeliveryNumBer @DN AND CIMP_CounterIdentification = @CI
Open Rec
fetch next from Rec -- saute le premier record
fetch next from Rec
WHILE @@FETCH_STATUS = 0
BEGIN
--delete
fetch next from Rec --record suivant
END
Close Rec
DEALLOCATE Rec
FETCH NEXT FROM tdouble into @client, @KE, @DN, @CI -- record suivant
END
Close tdouble
Deallocate tdouble

A+
0
Rejoignez-nous