日期:2014-05-17  浏览次数:20510 次

sql server 2000 表内记录重复问题
在操作数据库时,不小心误操作,导致表中的记录重复录入,如下图所示:

现在想用把重复的记录全部删除掉,只保留一条,其中CSNTusername字段可作为唯一字段,脚本需要如何编写,多谢
------解决方案--------------------
 IF OBJECT_ID(N'Test',N'U') IS NOT NULL
 DROP TABLE Test
 
 
 CREATE TABLE Test
 ( CSNTusername VARCHAR(50),
 
 CSNTpassword VARCHAR(50),
 CSNTresult INT,
 CSNTgroup INT,
 CSNTacctInfo VARCHAR(50)
 )
 
 INSERT INTO Test
 SELECT '0000010145','42,42,42,42,',0,0,''  UNION ALL
 SELECT '0000010145','42,42,42,42,',0,0,''  UNION ALL
 SELECT '0000010145','42,42,42,42,',0,0,''  UNION ALL
 SELECT '0000056225','42,56,49,55,53,50,',0,0,''  UNION ALL
 SELECT '0000056225','42,56,49,55,53,50,',0,0,''  UNION ALL
 SELECT '0000056225','42,56,49,55,53,50,',0,0,''  UNION ALL
 SELECT '9100000012','46,46,46,46,46,46,',0,0,''  UNION ALL
 SELECT '9100000012','46,46,46,46,46,46,',0,0,''  UNION ALL
 SELECT '9100000012','46,46,46,46,46,46,',0,0,''  UNION ALL
 SELECT '0000002051','47,42,45,55,56,57,',0,0,''  UNION ALL
 SELECT '0000002051','47,42,45,55,56,57,',0,0,''  UNION ALL
 SELECT '0000002051','47,42,45,55,56,57,',0,0,''  UNION ALL
 SELECT '0000022489','48,48,48,48,',0,0,''  UNION ALL
 SELECT '0000022489','48,48,48,48,',0,0,''  UNION ALL
 SELECT '0000022489','48,48,48,48,',0,0,''  
 
 GO
--删除前 
SELECT * FROM  Test
--删除后
GO
 DELETE FROM   dbo.TEST WHERE  TEST.%%physloc%% NOT IN (SELECT MIN(b.%%physloc%%) 
 FROM   TEST b  GROUP BY CSNTusername)
 
 SELECT * FROM  Test
 /*
 (15 行受影响)
CSNTusername                                       CSNTpassword                                       CSNTresult  CSNTgroup   CSNTacctInfo
-------------------------------------------------- -------------------------------------------------- ----------- ----------- --------------------------------------------------
0000010145                                         42,42,42,42,                                       0           0           
0000010145