查询重复记录

简介:
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,如需转载请自行联系原作者
相关文章
|
6月前
|
SQL Java 数据库连接
MyBatisPlus-聚合查询、分组查询及等值查询
MyBatisPlus-聚合查询、分组查询及等值查询
976 0
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
53 1
|
关系型数据库 MySQL
MySQL查询之 联合主键
MySQL查询之 联合主键
230 0
|
SQL 数据处理 开发者
DQL 之条件查询、模糊查询及排序|学习笔记
快速学习 DQL 之条件查询、模糊查询及排序
114 0
DQL 之条件查询、模糊查询及排序|学习笔记
查询-多条件查询
查询-多条件查询
105 0
查询-多条件查询
|
SQL
**SQL某一表中重复某一字段重复记录查询与处理
sql某一表中重复某一字段重复记录查询与处理   1.查询出重复记录  select 重复记录字段 form  数据表 group by houseno having count(重复记录字段)>1 2.
956 0
Sql 查询重复记录中最新的数据
Sql 查询重复记录中最新的数据
Sql 查询重复记录中最新的数据
|
SQL 关系型数据库 MySQL
MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询)
386 0
|
SQL Java 数据库连接
JPA的多表复杂查询
JPA的多表复杂查询
285 0