首页 > 开发 > 综合 > 正文

查询重复记录

2024-07-21 02:08:04
字体:
来源:转载
供稿:网友

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 ['[email protected]+'] add ['+[email protected]+'] decimal(38,0) identity(1,1)')
end
select @fd='',@tj=''
select @[email protected]+',['+name+']'
 ,@[email protected]+'['+name+']=a.['+name+'] and '
from syscolumns
where object_name(id)[email protected] and name<>@keyfdname
set @fd=substring(@fd,2,8000)
exec('select '[email protected]+' from ['[email protected]+'] a
 where exists(select 1 from ['[email protected]
 +'] where a.['[email protected]+'])'">'[email protected]+'['[email protected]+']<>a.['[email protected]+'])')
if @nokey=1
 exec('alter table ['[email protected]+'] drop column ['[email protected]+']')
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
--*/

 
 



收集最实用的网页特效代码!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表