查询重复记录

原创 2004年04月22日 14:31:00

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_qry]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_qry]
GO

/*--查询重复记录的通用存储过程
 
 可以查询出表中那些数据是重复的,这里的重复,是指除主键外重复的记录
 如果表中有主键,请指定主键.
 如果表中有标识字段,而且标识字段无重复,请在调用时,将主键指定为标识字段
  如果标识字段重复,不能用此存储过程

-- 2004.4--*/

create proc p_qry
@tbname sysname,  --要查询的表名
@keyfdname sysname=null --表中的主键,如果未指定,则表中无主键
as
declare @nokey bit,@fd varchar(8000),@tj varchar(8000)
set nocount on
if isnull(@keyfdname,'')=''
begin
 select @keyfdname=cast(newid() as char(36)),@nokey=1
 exec('alter table ['+@tbname+'] add ['+@keyfdname+'] decimal(38,0) identity(1,1)')
end
select @fd='',@tj=''
select @fd=@fd+',['+name+']'
 ,@tj=@tj+'['+name+']=a.['+name+'] and '
from syscolumns
where object_name(id)=@tbname and name<>@keyfdname
set @fd=substring(@fd,2,8000)
exec('select '+@fd+' from ['+@tbname+'] a
 where exists(select 1 from ['+@tbname
 +'] where '+@tj+'['+@keyfdname+']<>a.['+@keyfdname+'])')
if @nokey=1
 exec('alter table ['+@tbname+'] drop column ['+@keyfdname+']')
set nocount off
go

--调用示例
--创建测试数据
create table 表(f1 int,f2 int,f3 int,f4 int,f5 int)
insert into 表
select 1,1,1,1,1
union all select 2,1,1,1,1
union all select 3,2,1,23,1
union all select 4,2,3,1,3
union all select 5,1,1,1,1
go

--调用通用存储过程实现楼主的查询
exec p_qry '表','f1'

--删除测试环境
drop table 表


/*--测试结果

f2          f3          f4          f5         
----------- ----------- ----------- -----------
1           1           1           1
1           1           1           1
1           1           1           1
--*/

 
 

MySQL之——查询重复记录、删除重复记录方法大全

查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ...
  • l1028386804
  • l1028386804
  • 2016年06月22日 13:30
  • 28445

MySQL Distinct 去掉查询结果重复记录

DISTINCT 使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录。 语法: SELECT DISTINCT(column) FROM tb_name 例子: ...
  • k8080880
  • k8080880
  • 2011年09月28日 16:42
  • 9297

SQL 查找重复记录

SQL 查找重复记录 USE TESTGOIF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAM...
  • eastlift
  • eastlift
  • 2006年12月23日 23:25
  • 5151

oracle查询重复数据方法

SQL重复记录查询方法 2008年08月14日 星期四 21:01 SQL重复记录查询 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 sel...
  • Mick_Yang
  • Mick_Yang
  • 2014年01月16日 10:22
  • 30629

数据库查询重复记录的数量

Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Ema...
  • I_peter
  • I_peter
  • 2016年08月22日 20:50
  • 2275

MySql中,查询不重复记录的总数的方法

MySql中,查询不重复记录的总数的方法 查询book表中bookame字段中非重复的书名总数,查询语句为 select count(bookid), count(distinct booknam...
  • design321
  • design321
  • 2013年01月30日 13:19
  • 2687

sql 查询重复记录2

========第一篇=========在一张表中某个字段下面有重复记录,有很多方法,但是有一个方法,是比较高效的,如下语句:select data_guid from adam_entity_dat...
  • tobeistdo
  • tobeistdo
  • 2009年11月11日 11:41
  • 8637

Access 查询同一张表中某个字段含有重复项的记录

 标题起得有点长,不过我要把文章主题表达的精确点。我的测试环境是Access 2003,操作对象是单一的表,目标是要把某个字段含有重复项的记录找出来。围绕这个目标再展开谈点相关的SQL语句。在两张表里...
  • gracexu
  • gracexu
  • 2007年12月19日 15:36
  • 24329

SQL重复记录处理(查找,过滤,删除)

= * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * 作 者: 我本有心  QQ: 381584252E-Mail...
  • hztgcl1986
  • hztgcl1986
  • 2007年11月02日 08:29
  • 4788

oracle查询重复记录

一、查询某个字段重复 select * from User u where u.user_name in (select u.user_name from User u group by...
  • kang649882
  • kang649882
  • 2014年12月17日 21:25
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查询重复记录
举报原因:
原因补充:

(最多只允许输入30个字)