begin process at 2008 07 04 09:47:22
1 204 528 membres
70 nouveaux aujourd'hui
14 116 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SCHEMA DE PROCEDURE PERMETTANT D'EFFACER LES DOUBLONS SUR PLUSIEURS CHAMPS D'UNE TABLE SQL SERVER


Information sur la source



Description

Schema de procédure permettant d'effacer les doublons d'une table lorsque la valeur d'un doublon est sur plusieurs champs

Source

  • SET QUOTED_IDENTIFIER ON
  • GO
  • SET ANSI_NULLS ON
  • GO
  • Create procedure Usp_EffaceDoubValeurs as
  • DECLARE csr1 CURSOR FOR
  • SELECT Col1, Col2, COUNT(*) --mettre les champs en question
  • FROM matable -- Indiquer la table
  • GROUP BY Col1, Col2 -- mettre les champs en question
  • HAVING COUNT(*) > 1 -- Chercher les valeurs qui sont présentes plus d'une fois
  • FOR READ ONLY
  • DECLARE @Col1 INT
  • DECLARE @Col2 INT
  • DECLARE @count INT
  • OPEN csr1
  • FETCH NEXT FROM csr1 INTO @Col1, @Col2, @count
  • WHILE @@FETCH_STATUS <> -1
  • BEGIN
  • IF @@FETCH_STATUS <> -2
  • BEGIN
  • SET @count = @count - 1 --efface toutes les valeurs sauf une
  • SET ROWCOUNT @count
  • DELETE FROM MaTable -- indiquer la table
  • WHERE Col1 = @Col1 AND Col2 = @Col2 -- indiquer les champs
  • END
  • FETCH NEXT FROM csr1 INTO @Col1, @Col2, @count
  • END
  • CLOSE csr1
  • DEALLOCATE csr1
  • SET ROWCOUNT 0
  • GO
  • SET QUOTED_IDENTIFIER OFF
  • GO
  • SET ANSI_NULLS ON
  • GO
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

Create  procedure Usp_EffaceDoubValeurs as

DECLARE csr1 CURSOR FOR
SELECT Col1, Col2, COUNT(*) --mettre les champs en question
FROM matable -- Indiquer la table 
GROUP BY Col1, Col2  -- mettre les champs en question
HAVING COUNT(*) > 1 -- Chercher les valeurs qui sont présentes plus d'une fois
FOR READ ONLY 

DECLARE @Col1 INT
DECLARE @Col2 INT
DECLARE @count INT
OPEN csr1
FETCH NEXT FROM csr1 INTO @Col1, @Col2, @count

WHILE @@FETCH_STATUS <> -1
BEGIN
IF @@FETCH_STATUS <> -2
BEGIN
SET @count = @count - 1 --efface toutes les valeurs sauf une
SET ROWCOUNT @count
DELETE FROM MaTable  --  indiquer la table

WHERE Col1 = @Col1 AND Col2 = @Col2 --  indiquer les champs
END 
FETCH NEXT FROM csr1 INTO @Col1, @Col2, @count
END 
CLOSE csr1
DEALLOCATE csr1
SET ROWCOUNT 0 







GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
  • signaler à un administrateur
    Commentaire de FENETRES le 06/08/2007 14:36:06

    Plus classiquement, je préfère :
    DELETE TOP (@Count-1) FROM ...
    Pour la maintenance, il faut savoir resté le plus simple possible !

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS