电信站 网通站
 
 
万网产品站   新网产品站
服务热线: 0791-6810858
  400-6868-103 (免长途费)
 
首 页     网站建设     OA办公     网站推广     域名注册     虚拟主机     集团邮局     服务器租用     运营顾问     网站案例  
您现在的位置:首页 → 运营顾问 → 网站建设类
  运营顾问
Consultant
    网站建设类
    网络营销类
    运营研究类
    网站优化类
 
嵌套游标的方式来删除表中重复的数据
网站建设类 www.21it.com 时间:2008-12-26 15:07:18
处理思路:
写一存储过程,使用游标嵌套,读取所有数据,然后依次判断排除,将有重复的ID放入以逗号分开的字符串中,最后使用delete语句批量删除。
以下是具体实现sql语句:

批量删除表中重复数据[www.cn-web.com]

--删除数据库中某表的重复的数据
--作者:老韩,支持:cn-web.com
--要删除的表名为:WeiXianYuanXinXTJ
--判断是否重复的依据为ZhuBiaoLeiXing,qiyeid,zhubiaoxuhao这三个字段一样
--表的主键字段为id

declare @ZhuBiaoLeiXing varchar(400),@qiyeid varchar(4000),@zhubiaoxuhao varchar(4000), @idid varchar(40)
declare @ZhuBiaoLeiXing2 varchar(400),@qiyeid2 varchar(4000),@zhubiaoxuhao2 varchar(4000),@idid2 varchar(40)
declare @idids varchar(8000)
declare @idids2 varchar(8000)
declare @tmpsql nvarchar(4000)
declare @tmpbool int
set @idids='0'
set @idids2='0'
declare cur_tabA cursor for select ZhuBiaoLeiXing,qiyeid,zhubiaoxuhao,[id] from WeiXianYuanXinXTJ 
open cur_tabA
 fetch next from cur_tabA into @ZhuBiaoLeiXing,@qiyeid,@zhubiaoxuhao,@idid
 while @@FETCH_STATUS = 0
 begin
  set @tmpbool=0
  set @tmpsql='declare dur_tabA cursor for select ZhuBiaoLeiXing,qiyeid,zhubiaoxuhao,[id] from WeiXianYuanXinXTJ where [id]<>@ididz and [id] not in ('+@idids+')'
   exec sp_executesql @tmpsql,N'@ididz varchar(40)',@ididz=@idid
   open dur_tabA
    fetch next from dur_tabA into @ZhuBiaoLeiXing2,@qiyeid2,@zhubiaoxuhao2,@idid2
     while @@FETCH_STATUS = 0
      begin
       if @ZhuBiaoLeiXing2=@ZhuBiaoLeiXing and @qiyeid2=@qiyeid and @zhubiaoxuhao2=@zhubiaoxuhao
       begin
        if @tmpbool=0
         begin 
         set @idids2=@idids2+','+@idid2+','+@idid
         end
         else
         begin
         set @idids2=@idids2+','+@idid2
         set @tmpbool=1
         end
       set @idids=@idids+','+@idid2
       end
      fetch next from dur_tabA into @ZhuBiaoLeiXing2,@qiyeid2,@zhubiaoxuhao2,@idid2
      end
   close dur_tabA
   deallocate dur_tabA

  fetch next from cur_tabA into @ZhuBiaoLeiXing,@qiyeid,@zhubiaoxuhao,@idid
 end
close cur_tabA
deallocate cur_tabA

declare @laohan_del nvarchar(4000)
set @laohan_del='delete  from WeiXianYuanXinXTJ where [id] in ('+@idids+')'
exec sp_executesql @laohan_del
以上在sql2000中测试通过

 
咨询反馈
如果想获得更为详细的解决方案,并获得专业的支持,请您与我们联系,您也可以在线提交建站意向。
程序开发
世纪网络专业应用系统开发,帮助客户建立业务管理系统、员工管理系统、办公自动化系统等,提高工作效率,提高生产力。
网站推广
Baidu百度作为全球最大的中文搜索引擎,是国内用户最常使用搜索引擎。实践证明,其竞价排名是目前为止效果最好,投资回报最高的网络推广服务。
收藏本站  |  关于我们  |  新闻公告  |  付款方式  |  留言反馈  |  人才招聘  |  合作伙伴  |  联系方式
版权所有 © 2008 江西世纪网络科技有限公司 赣ICP备05020270号
全国统一服务热线:400-6868-103   QQ在线:80229612  6022008  24009604
电话:0791-6810858   6810859    不间断服务:13097283353   13870607108
地址:南昌市南京东路165号东方广场A1-2座1104 (邮编:330029)
法律顾问:北京市衡基律师事务所 徐颖略律师