查询重复记录

简介:
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
--
*/




本文转自高海东博客园博客,原文链接http://www.cnblogs.com/ghd258/archive/2005/10/24/260769.html,如需转载请自行联系原作者
相关文章
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
52 1
|
关系型数据库 MySQL
MySQL查询之 联合主键
MySQL查询之 联合主键
227 0
查询-多条件查询
查询-多条件查询
101 0
查询-多条件查询
|
SQL
**SQL某一表中重复某一字段重复记录查询与处理
sql某一表中重复某一字段重复记录查询与处理   1.查询出重复记录  select 重复记录字段 form  数据表 group by houseno having count(重复记录字段)>1 2.
955 0
oracl查询两表相同的字段
学习oracl查询两表相同的字段。
Sql 查询重复记录中最新的数据
Sql 查询重复记录中最新的数据
Sql 查询重复记录中最新的数据
|
SQL 关系型数据库 MySQL
MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询)
385 0
关于组合查询的实现
示范中心有一项功能是组合查询,就是在现有数据(例如教师、实验室、实验项目)中过滤出感兴趣的数据。因为数据的类型比较多,大约有十个,为每种类型都做一套查询界面和对应的Action代码很不划算。 我打算通过配置文件的方式,为每个类型的数据都需要对哪些属性进行过滤进行说明,并且说明每个属性在界面上表现为文本框、下拉框或是日期选择框,从而生成不同的查询界面,比如下面的格式定义了教师的查询属性集合,等等。
902 0