硬盘数据恢复导航
RAID数据恢复导航
 | 网站首页 | 数据恢复资料 | 数据恢复软件 | 咨询留言 | 数据恢复博客 | 数据恢复论坛 | 
数据恢复软件下载
公司简介 数据恢复成功案例 数据恢复报价 数据恢复培训 数据恢复技术文章 数据恢复客服中心 数据恢复服务联系方式
您现在的位置: 北亚数据恢复技术站 >> 数据恢复资料 >> 相关编程资料 >> 文章正文
删除数据库中重复数据的几个方法            【字体:
删除数据库中重复数据的几个方法
作者:未知    文章来源:网络    点击数:    更新时间:2009-5-6

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……

  方法一


  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子句中省去此列)

  更改数据库中表的所属用户的两个方法
  大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……

  --更改某个表


  exec sp_changeobjectowner 'tablename','dbo'


  --存储更改全部表


  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
  @OldOwner as NVARCHAR(128),
  @NewOwner as NVARCHAR(128)
  AS

  DECLARE @Name as NVARCHAR(128)
  DECLARE @Owneras NVARCHAR(128)
  DECLARE @OwnerNameas NVARCHAR(128)

  DECLARE curObject CURSOR FOR
  select 'Name' = name,
  'Owner' = user_name(uid)
  from sysobjects
  where user_name(uid)=@OldOwner
  order by name

  OPENcurObject
  FETCH NEXT FROM curObject INTO @Name, @Owner
  WHILE(@@FETCH_STATUS=0)
  BEGIN
  if @Owner=@OldOwner
  begin
  set @OwnerName = @OldOwner + '.' + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
  end
  -- select @name,@NewOwner,@OldOwner

  FETCH NEXT FROM curObject INTO @Name, @Owner
  END

  close curObject
  deallocate curObject

  GO


  SQL SERVER中直接循环写入数据
  没什么好说的了,大家自己看,有时候有点用处


  declare @i int
  set @i=1
  while @i<30
  begin
  insert into test (userid) values(@i)
  set @i=@i+1
  end

收藏此页到 IE收藏夹 POCO网摘 [365Key] [ViVi] 百度藏搜 和讯网摘 向您的朋友推荐此文章 发送文章到手机
转载请注明来源:文章大全 网址:http://www.itlearner.com/article/
文章关键词:mssql 置疑 恢复
如意搜索搜索更多内容:SQL SERVER日志清除的两种方法
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。

文章录入:a    责任编辑:a 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    关于我们 | RAID数据恢复 | 友情链接 | RSS生成 | XML生成 | 文章HTML地图 | 下载HTML地图

    版权所有 北亚数据恢复中心
    全国统一客服电话:4006-505-808
    北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
    京ICP备05011939
    rp