Ajout d'une clé primaire avec des doublons [Résolu]

jourdanne85 27 Messages postés dimanche 14 décembre 2008Date d'inscription 20 octobre 2009 Dernière intervention - 15 oct. 2009 à 16:35 - Dernière réponse : jourdanne85 27 Messages postés dimanche 14 décembre 2008Date d'inscription 20 octobre 2009 Dernière intervention
- 20 oct. 2009 à 15:18
Bonjour à tous,

Voilà mon problème.
Je dois récupérer une table DM_CONSULTATION_PLAINTE (SQL Server Express).
Cette table représente en fait les plaintes enregistrées par un ostéo lors des consultations.
Voici les principaux champs : NoConsultation, Description, CodePlainte, Rang.

Pour l'instant, il n'y a pas de clé primaire et je tiens à en rajouter une.
Le problème est qu'il y a des doublons avec le même NoConsultation et le même Rang.
Le rang sert en fait à différencier les différentes plaintes d'une même consultation.

Je veux donc rajouter un champ clé primaire à cette table afin que chaque ligne soient identifiée. Cette clé doit donc avoir un numéro incrémenté de 1 pour chaque ligne de la table.

Je ne vois pas comment je peux faire.
Si quelqu'un a une solution !
Merci d'avance
Afficher la suite 

1 réponse

Répondre au sujet
jourdanne85 27 Messages postés dimanche 14 décembre 2008Date d'inscription 20 octobre 2009 Dernière intervention - 20 oct. 2009 à 15:18
+3
Utile
Après quelques recherches j'ai enfin trouvé la solution :

Mon problème était le suivant :
Je devais rajouter un Id à une table qui comportait des doublons.

Tout d'abord, j'ai utilisé un curseur qui va généré un nombre pour chaque ligne.
Pour ceci, j'ai rajouté un champ "Essai" à ma table.
DECLARE @i INT
DECLARE @Essai INT
SET @i = 1
DECLARE CURSEUR_DOUBLON_Dysfonction CURSOR
FOR    
   SELECT Essai
   FROM   DM_CONSULTATION_DYSFONCTION
FOR UPDATE

OPEN CURSEUR_DOUBLON_Dysfonction

FETCH CURSEUR_DOUBLON_Dysfonction INTO @Essai

WHILE @@FETCH_STATUS = 0
BEGIN
   UPDATE DM_CONSULTATION_DYSFONCTION
   SET    Essai = @i
   WHERE  CURRENT OF CURSEUR_DOUBLON_Dysfonction

   SET @i = @i + 1

   FETCH CURSEUR_DOUBLON_Dysfonction INTO @Essai  

END

CLOSE CURSEUR_DOUBLON_Dysfonction

DEALLOCATE CURSEUR_DOUBLON_Dysfonction

Ensuite, il faut maintenant supprimer les doublons.
DELETE
FROM   DM_CONSULTATION_DYSFONCTION
WHERE  DM_CONSULTATION_DYSFONCTION.Essai < ANY (SELECT Essai
                      FROM   DM_CONSULTATION_DYSFONCTION D2
                      WHERE  DM_CONSULTATION_DYSFONCTION.Essai <> D2.Essai
                        AND  DM_CONSULTATION_DYSFONCTION.Rang    = D2.Rang
AND  DM_CONSULTATION_DYSFONCTION.NoConsultation = D2.NoConsultation
                        AND  DM_CONSULTATION_DYSFONCTION.CodeDysfonction = D2.CodeDysfonction)

Nous avons maintenant une table avec un ID pour chaque ligne et sans aucoun doublon.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jourdanne85

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.