当前位置:首页>> 网站建设知识>> 网站建设知识

全文搜索

精华导读

·网站知识:虚拟中的真实:虚拟主机应用初探
·如何做好互联网的策划
·自动分词与中文搜索引擎
·网页文章的优化
·网站的一些基础小知识
·把网站变成卖场
·细说选择.cn域名的七大理由
·网站性感域名十大原则
·大型商务网站的SEO优化误区
·导致搜索引擎收录困难的5种原因
·网站建设中meta标签之详解
·网页制作中Web网页安全色谱
·网页设计中HTML常范的五个错误
·如何建立网站地图(site map)
·网站建设时如何选购虚拟主机?
·中国国家顶级域名和国际域名有什么区别?
·企业建设网站域名可以使用哪些字?
·建设网站时企业如何准备建网站资料?
·DIV+CSS建立标准WEB网页的好处

最新发表

·查询某表中的有字段名称和字段类型
·网站知识:web特殊符号大全
·Asp基础教程之内置对象的使用
·asp技术:Asp基础教程之内置对象的使用
·Asp基础教程之组件的开发与使用
·Asp基础教程之IIS最优化配置
·网站知识:Asp基础教程之常用操作
·网站知识:Asp基础教程之实用开发小技巧
·实现ajax的另类方法
·让框架随屏幕分辨率不同而自动调整
·asp.net(c#)生成汉字/汉语词组拼音的方法
·asp.net(c#)生成汉字/汉语词组拼音缩写的方法
·使用extjs将div浮动并实现鼠标拖放
·ASP实现文件直接下载
·关于CSS hack的思考
·纯CSS Tooltips
·CSS中float引起层飘出上级层的解决方案,清除浮动的好方法
·用CSS样式实现显示隐藏层方案
·用CSS按比例缩放图片

嵌套游标的方式来删除表中重复的数据

文章来源:数据库技术 文章编辑:admin 添加时间:2009-3-3 13:34:15

近日全省各地市向省中心上报数据,因软件设计的问题,上报后发现表中有重复的数据,数据量太大,只能考虑批处理。 


--------------------------------------------------------------------------------

处理思路:
写一存储过程,使用游标嵌套,读取所有数据,然后依次判断排除,将有重复的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中测试通过

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
查询某表中的有字段名称和字段类型