Sql Server里删除数据表中重复记录的例子

 更新时间:2014年08月14日 09:18:32   投稿:junjie  
这篇文章主要介绍了Sql Server里删除数据表中重复记录的例子,本文给出了3种操作方法,需要的朋友可以参考下

[项目]

数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除!

[分析]

1、生成一张临时表new_users,表结构与users表一样;
2、对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表;如果已经有了相同的项,则忽略此条记录;
3、把users表改为其它的名称,把new_users表改名为users,实现我们的需要。

[程序]

复制代码 代码如下:

declare @id int,@u_name varchar(50),@u_pwd varchar(50)
set @id=1

while @id<1000
begin
       if exists (select u_name from users where u_id=@id)       
       begin
               select @u_name=u_name,@u_pwd=u_pwd from users where u_id=@id  --获取源数据
               if not exists (select u_name from new_users where u_name=@u_name) -- 判断是否有重复的U-name项
               begin
                       insert into new_users(u_name,u_pwd) values(@u_name,@u_pwd)
               end
       end
       set @id=@id+1
end

select * from new_users

[方法二]
假设Users表中有相同的name项,id为主键标识字段。现在要求去掉Users中重复的name项。

1、把不重复的ID保存在一个tmp1表里面。

复制代码 代码如下:
select min([id]) as [id]  into tmp1 from Users group by [name]

2、从Users表中选取tmp1表中的id项,将相应id的数据写入表tmp2
复制代码 代码如下:
select * into tmp2 from Users where [id] in( select [id] from tmp1)

3、把Users、tmp1两张表Drop掉
复制代码 代码如下:
drop table Users
drop table tmp1

4、把tmp2表改名为User表

[注]如果没有主键标识id,可以增加一个标识字段,方法如下:

复制代码 代码如下:
select identity(int,1,1) as autoID, * into tmp0 from Users

[情况三]
假设有一个User表,id为主键标识字段,但有一些完全重复的项。现在要求去掉Users中这些完全重复的项,只保留一条。

1、把不重复的数据保存在tmp1表中

复制代码 代码如下:
select distinct * into tmp1 from Users

2、把Users表删除
复制代码 代码如下:
drop table Users

3、把tmp1表中的数据导入到Users表
复制代码 代码如下:
select * into Users from tmp1

4、把tmp1表删除
复制代码 代码如下:
drop table tmp1

相关文章

  • SQL Server 存储过程解析

    SQL Server 存储过程解析

    微软的SQL Server的存储过程机制能够通过对Transact-SQL语句进行组合而大大地简化了数据库开发过程。
    2009-03-03
  • sql实现修改表字段名的方法详解

    sql实现修改表字段名的方法详解

    本篇文章是对sql实现修改表字段名进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mssql server 2012(SQL2012)各版本功能对比

    mssql server 2012(SQL2012)各版本功能对比

    今天装了操作系统2012,也顺便搞下SQL 2012看了下版本,选择了自己的版本,也特留下版本对比供后来人参考
    2013-04-04
  • 关于SQL表中drop table和delete table的区别

    关于SQL表中drop table和delete table的区别

    删表是一个比较危险的操作,这次给了个机会就想尝试下,记得在mysql表中有两种操作,drop与delete,但是在maxcompute产品中尝试时,该产品只支持drop操作。这里说下二者操作的区别,需要的朋友可以参考下
    2023-01-01
  • 判断字段是否被更新 新旧数据写入Audit Log表中

    判断字段是否被更新 新旧数据写入Audit Log表中

    客户要求,要对一个敏感数据表进行Audit跟踪。如果记录被更新时,要把旧新保存起来,是谁更改了记录,什么时候更新的等相关信息。还有一个主要问题就是客户不确定具体要跟踪那个字段,希望自己决定
    2012-01-01
  • 配置SQL Server数据库恢复模式(2种方法)

    配置SQL Server数据库恢复模式(2种方法)

    这篇文章主要介绍了配置SQL Server数据库恢复模式的两种方法,需要了解的朋友可以参考下
    2015-10-10
  • GreatSQL 在SQL中如何使用 HINT 语法修改会话变量

    GreatSQL 在SQL中如何使用 HINT 语法修改会话变量

    GreatSQL推出新的优化Hint功能,名为SET_VAR,允许用户在查询语句中修改数据库的会话变量,但只对当前查询会话生效,不影响其他会话,本文给大家介绍GreatSQL 在SQL中如何使用 HINT 语法修改会话变量,感兴趣的朋友一起看看吧
    2024-10-10
  • SQLServer 批量导入目录文件

    SQLServer 批量导入目录文件

    可以用扩展存储过程xp_dirtree获取文件列表,用openrowset倒入数据到二进制字段。
    2009-08-08
  • SQL Server纵表转横表的实现示例

    SQL Server纵表转横表的实现示例

    在使用SQL Server数据库的过程中我们经常会遇到需要将查询结果从纵表转成横表的问题,本文就来介绍一下SQL Server纵表转横表示例,感兴趣的可以了解一下
    2023-12-12
  • SQL Server中元数据函数的用法

    SQL Server中元数据函数的用法

    这篇文章介绍了SQL Server中元数据函数的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论