Ajout d'une clé primaire avec des doublons

Résolu
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009 - 15 oct. 2009 à 16:35
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009 - 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

1 réponse

jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
20 oct. 2009 à 15:18
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.
3
Rejoignez-nous