查询重复记录

原创 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
--*/

 
 

sql 查出一张表中重复的所有记录数据

1、在面试的时候碰到一个 问题,就是让写一张表中有id和name 两个字段,查询出name重复的所有数据,现在列下: select * from xi a where (a.username...
  • A11085013
  • A11085013
  • 2013年01月28日 15:42
  • 139263

MySQL查询重复字段,及删除重复记录的方法

MySQL查询重复字段,及删除重复记录的方法(转) Submitted by wiley on Thu, 09/03/2009 - 09:36 [教学] MySQL查询...
  • Donthan
  • Donthan
  • 2013年04月11日 02:19
  • 30338

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

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

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

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
  • 2073

ORACLE查询删除重复记录三种方法

比如现在有一人员表 (表名:peosons) 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来  复制代码代码如下: select p1.*    from pe...
  • qiu_x_b
  • qiu_x_b
  • 2016年11月04日 15:34
  • 3026

查询重复记录和删除重复记录

/* Navicat MySQL Data Transfer Source Server : 本机 Source Server Version : 50022 Source...
  • zyn010101
  • zyn010101
  • 2013年05月14日 13:37
  • 264

在 Access 中查找并删除重复记录

如果您的 Access 数据库包含从多个源导入的数据,或者您继承了已经使用多年而且没有得到正确设置的数据库,那么该数据库中可能包含需要清除的重复记录。 要确定 Access 表中是否存在重复记录...
  • u012464951
  • u012464951
  • 2014年11月05日 13:58
  • 1759

oracle查询重复数据方法

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

SQL查询重复记录,去除重复记录

假设现有一张人员表(表名:Person),若想将姓名、身份证号、住址这三个字段完全相同的记录查找出来,使用 SELECT p1.* FROM persons p1,perso...
  • suleil1
  • suleil1
  • 2015年10月28日 16:57
  • 144

Hibernate Criteria 查询 出现重复实体

Hibernate Criteria 查询 出现重复实体 Role与RoleResourcePermission是OneToMany关系,通过Hibernate Criteria查询Role对象时...
  • u011404265
  • u011404265
  • 2016年12月19日 17:00
  • 1319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查询重复记录
举报原因:
原因补充:

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