查询重复记录
来源:百度文库 编辑:神马文学网 时间:2024/04/30 07:21:46
[日期:2005-07-08]来源:CSDN 作者:[字体:大中小]
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
+‘] wherea.[‘+@keyfdname+‘])‘">‘+@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
--*/
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
+‘] wherea.[‘+@keyfdname+‘])‘">‘+@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
--*/
查询重复记录
查询重复记录
处理表重复记录(查询和删除)_整理贴4
在oracle查询记录时给记录加锁 | 大学
从表中删除重复记录的SQL语句
从表中删除重复记录的SQL语句
删除mysql数据库中的重复数据记录_MySQL_网贝建站
在Recordset对象中查询记录的方法11
MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
强迫性重复
重复的矿难 重复的问题
药品查询 - 药品查询
列车时刻查询 列车车次查询
药品查询 - 药品查询
不要重复 DAO!
可重复级
重复也是美
路由器设置重复
无法重复的选择
95年行情重复
不要怕重复
双色球红球二连号里捕捉重复号
不可重复的
生命不能重复