Bonjour, j'ai une base de données que je souhaiterais dédoublonner sur l'adresse Email.

Pour celà je suis en train de construire une procédure stockée pour garder, de toutes les lignes qui possèdent la même adresse mail, la dernière. J'imagine ( si vous avez de meilleures idées n'hésitez pas ) utiliser deux curseurs sur l'adresse mail.
Pour chaque adresse prise par le premier, le second va donc parcourir la table, si une correspondance est trouvée, la ligne du premier est supprimée et on recommence.

trois questions : comment supprimer la ligne courante d'un curseur, et puis-je faire dans la procédure un order by Email pour que la procédure soit plus rapide ? Il faudrait que le second curseur démarre à la ligne directement après la ligne courante du premier, comment faire ?

edit : en fait en écrivant celà je réalise que je peux faire pour le second curseur un select * where Email=valeur du premier... mais alors comment supprimer toutes les lignes de ce résultat sauf la dernière ?

edit2 : voilà à quoi ca pourrait ressembler ( avec un seul curseur ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE PROCEDURE dedoub AS
  DECLARE @mailRef VARCHAR(64)
  DECLARE @compte INT
 
  DECLARE curseur CURSOR for
    SELECT * FROM ( SELECT count(*) as Expr1, Email from Adresses group by Email ) where Expr1 >1
 
  OPEN curseur
  FETCH curseur into @compte, @mailRef
  WHILE @@FETCH_STATUS=0 BEGIN
     DELETE TOP (@compte - 1) from Adresses where Email=@mailRef
     FETCH curseur into @compte, @mailRef
  END
  CLOSE curseur
  DEALLOCATE curseur
est ce que celà serait correct ? ( outre le fait que sqlserver me signale une erreur "vers le mot clé where" que je ne trouve pas )