当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server中删除重复数据的几个方法

MSSQL
MS SQL SERVER2005 XML 最佳实践
SQL Server对文件进行全文检索的查询
教你构建SQL Server可管理安全机制
维护SQL Server的交易日志经验总结
SQL SERVER 2005 EXPRESS不能远程连接的问题
SQL Server与Oracle并行访问本质区别
SQL Server数据库优化其索引的小技巧
分析及解决SQLServer死锁问题
用SQL Server为Web浏览器提供图像
SQL Server SQL Agent服务使用小结
SQL Server 存储过程的分页方案比拼
SQL Server数据库中存储引擎深入探讨
四招解决SQL Server对上亿表的排序和join的问题
SQL Server数据库管理员必须掌握的DBCC命令
如何将sql数据库的文件备份到本地?
如何解决Sybase数据库乱码问题详解
SQL Server:SQLServer中最小函数依赖集
小编谈Transact-SQL中的一些命名规范
谈SQL编写规范
浅谈SQL命名与注释规范

MSSQL 中的 SQL Server中删除重复数据的几个方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 197 ::
收藏到网摘: n/a

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……    
   
  方法一  
   
  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:以当前密码登录的尝试因下列错误而宣告失败:   在第一次登录之前,必须更改用户密码。