SQL Server中删除重复数据的几个方法
数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
查询分析器不能单步调试的的原因
具体步骤如下:
1、将服务器【身份验证】属性设置成【混合模式】(window与SQL身份验证)
2、在【控制面板】中打开【服务】将【MS SQL Server】服务打开【属性】,选择【登录】页面,将登录身份设置成服务器本地帐号和该帐号密码,如administrator,密码123;
3、重新启动SQL Server服务,此时的服务指的是【SQL服务管理器】中的SQL Server服务;假设【帐号】设置为administrator 。此时达到的效果是:服务器本地帐号administrator与客户端上的administrator(并且该帐号的密码要与服务器密码相同)可以通过【查询分析器】进行调试;如果想让【其他帐号】也能够调试,那么还需要如下设置:
a、在【服务器】上运行dcomcnfg.exe;
b、在【默认安全机制】中【默认访问权限】右边点击【编辑默认值】选择允许调试的帐号类型,如users用户类型,sample帐号有包含users组;
c、重新启动SQL Server服务;
3、在客户端上创建与服务帐号密码一样的用户,如sample;做到这步就可以通过查询分析器的调试功能进行单步调试了。
注:第二步更改“启动服务帐户”,在第一次登录之前,必须更改用户密码。不然,event log:以当前密码登录的尝试因下列错误而宣告失败: 在第一次登录之前,必须更改用户密码。
选自:http://tech.it168.com/db/s/2006-08-09/200608090921177.shtml
问题点数:100、回复次数:59Top
1 楼coolingpipe(冷箫轻笛)回复于 2006-12-11 11:00:05 得分 0
哦
学习!Top
2 楼akkie()回复于 2006-12-11 11:01:03 得分 20
upTop
3 楼lxzm1001(*~悠悠蓝星梦~*)回复于 2006-12-11 11:13:10 得分 0
thanksTop
4 楼sgucxc0(ben)回复于 2006-12-11 11:15:43 得分 20
好。接分来了。Top
5 楼dawugui(潇洒老乌龟)回复于 2006-12-11 11:22:29 得分 0
學習+接分
Top
6 楼caixia615(*^_^*)‵My ɡīr!.ˊ想念妳ˋ 。(*^_^*)回复于 2006-12-11 11:23:38 得分 0
up,jf,学习Top
7 楼wangeju2003()回复于 2006-12-11 11:46:58 得分 20
學習+接分Top
8 楼liuyxit(初学Oracle)回复于 2006-12-11 11:49:56 得分 20
TKSTop
9 楼marco08(天道酬勤)回复于 2006-12-11 13:19:30 得分 0
學習+接分Top
10 楼marco08(天道酬勤)回复于 2006-12-11 13:19:39 得分 0
收藏先...Top
11 楼shawnwan()回复于 2006-12-11 15:14:43 得分 20
。。这不是问题,而是解答吧????????????Top
12 楼sdhylj(青锋-SS)(献血有益健康(别人的))回复于 2006-12-11 15:16:18 得分 0
答案.Top
13 楼zzxiaoma(小马)回复于 2006-12-12 08:55:18 得分 0
学习Top
14 楼zzxiaoma(小马)回复于 2006-12-12 08:55:35 得分 0
学习Top
15 楼qianjin558()回复于 2006-12-12 09:02:09 得分 0
好东西,收藏,希望楼主多多传授经验,谢了 !Top
16 楼yangyangxie(想飞的鱼)回复于 2006-12-12 09:36:49 得分 0
路过,学习一下Top
17 楼jackyqk()回复于 2006-12-12 09:39:57 得分 0
up+study+jf+^_^Top
18 楼shuqinpeng(苏秦)回复于 2006-12-12 10:07:23 得分 0
markTop
19 楼new_bcb()回复于 2006-12-12 10:50:21 得分 0
markTop
20 楼yi10000()回复于 2006-12-12 11:20:20 得分 0
楼主,好人...Top
21 楼eqh(我想早恋,可已经晚了...)回复于 2006-12-13 10:40:34 得分 0
学习了·Top
22 楼SZSEAWIND()回复于 2006-12-13 10:52:24 得分 0
goodTop
23 楼SupermanZgn(Sunny)回复于 2006-12-13 10:59:17 得分 0
实用。。Top
24 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-12-13 11:27:02 得分 0
学习Top
25 楼hymxtang(书童)回复于 2006-12-13 11:30:31 得分 0
好东西,收藏先...Top
26 楼lvjx125()回复于 2006-12-13 11:51:42 得分 0
學習+接分
收藏Top
27 楼xiaoku(野蛮人(^v^))回复于 2006-12-13 11:52:07 得分 0
接分谢谢...Top
28 楼mincunbao(衝動是魔鬼)回复于 2006-12-13 12:46:58 得分 0
学习,收藏Top
29 楼hdhmail2000(禅剑飞雪)回复于 2006-12-13 12:47:22 得分 0
很好,面试碰到过Top
30 楼laig8588(世界末日)回复于 2006-12-13 13:01:20 得分 0
Good Good study,Day Day Up!
Top
31 楼Sandy945(阿非)回复于 2006-12-13 13:06:08 得分 0
upTop
32 楼Bestkiller(重生的小強)回复于 2006-12-13 13:37:36 得分 0
学习Top
33 楼blueice008(无忧)回复于 2006-12-13 13:41:24 得分 0
学习Top
34 楼sclml()回复于 2006-12-13 13:56:31 得分 0
谢谢Top
35 楼phommy(石头,竹子,诗)回复于 2006-12-13 14:45:28 得分 0
从不知道查询分析器可以单步调试...
抽自己俩嘴巴应该Top
36 楼tianbing0401(tiantian)回复于 2006-12-13 14:54:59 得分 0
很棒 学习中Top
37 楼kinglh(小晖)回复于 2006-12-13 15:04:17 得分 0
不错 接发Top
38 楼tomhuang(春城)回复于 2006-12-13 15:14:15 得分 0
接分Top
39 楼babywywy()回复于 2006-12-13 16:27:50 得分 0
的确是好文章,这种文章对我们新人来说意义很大!Top
40 楼sp4(1)回复于 2006-12-13 16:37:01 得分 0
删除重复数据http://www.cnblogs.com/piaoqingsong/archive/2006/08/08/470931.htmlTop
41 楼Bennyatt()回复于 2006-12-13 16:48:21 得分 0
大家看看我这个 怎么过滤???
比如我 表如下
sid nid name mark time
sid 系统id nid 标号 name 名字 mark 分数 time 修改时间
1我要找出 nid name 都一样 的记录
然后 把 time 最新的 记录保留 期于的 删除
大家看看 这个 sql怎么写~~~
感激不禁~~~Top
42 楼zxyfp(千里马)回复于 2006-12-13 16:49:46 得分 0
学习学习啊Top
43 楼FEB15(张郎)回复于 2006-12-13 19:31:12 得分 0
踩个脚印Top
44 楼flyingjava()回复于 2006-12-13 21:56:21 得分 0
学习Top
45 楼qiusp001()回复于 2006-12-13 22:04:03 得分 0
markTop
46 楼Amwpfiqvy(给我分吧,让我升仙)回复于 2006-12-14 08:08:45 得分 0
要收藏Top
47 楼yiyefuping(一叶浮萍)回复于 2006-12-14 08:48:54 得分 0
markTop
48 楼ldslove()回复于 2006-12-14 09:07:23 得分 0
收藏Top
49 楼Mapleleaf123(为分而努力)回复于 2006-12-14 09:37:49 得分 0
收藏+接分Top
50 楼qfkfw(空军一号)回复于 2006-12-14 09:41:15 得分 0
收藏+接分
Top
51 楼wuya8115(无涯)回复于 2006-12-14 11:48:55 得分 0
顶,谢谢,Top
52 楼zzyong00(阿勇)回复于 2006-12-14 13:21:20 得分 0
收了Top
53 楼yudi010(★★逍遥浪子★★)回复于 2006-12-14 17:05:10 得分 0
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
你这句话有问题的
因为你这样做,tablename中设置的主键就没有了,所以不能够这么进行删除
Top
54 楼Juchiyufei(三更半夜我送你回家.总统也许我做不到.今生难得的遇见你,我们就应该在一起.....)回复于 2006-12-15 10:09:57 得分 0
mark
Top
55 楼dangerhu(不会编程的危险胡!)回复于 2006-12-15 22:23:29 得分 0
学了 ,Top
56 楼dbdebuger(深入数据库编程中...)回复于 2006-12-15 23:26:03 得分 0
谢谢,不过有两个地方没用过,我要试试好不好用Top
57 楼hhuosheng()回复于 2006-12-17 07:31:03 得分 0
好的,非常好
学到了东西啊!
谢谢你 楼主Top
58 楼jason_mf()回复于 2007-03-12 11:10:36 得分 0
收藏Top
59 楼ls212(鲁四)回复于 2007-03-19 09:47:41 得分 0
收藏!Top




