查询重复记录

重复|重复记录

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 a.['+@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
--*/

 
 

时间: 2024-11-01 23:33:50

查询重复记录的相关文章

sql-SQL查询重复记录,怎么写SQL。

问题描述 SQL查询重复记录,怎么写SQL. id A B B C C A A D 要得到这样的 id 数量 A 3 B 2 C 2 D 1 怎么写啊? 解决方案 select id, count(id) as 数量 from 表 group by id 解决方案二: SQL重复记录查询SQL重复记录查询SQL重复记录查询 解决方案三: SELECT id, COUNT(1) AS '数量' FROM 表 GROUP BY id ORDER BY COUNT(1) desc 解决方案四: sel

mysql GROUP BY删除查询重复记录

我们先来看查询重复记录  代码如下 复制代码 SELECT *   FROM (   SELECT *   FROM dede_archives   ORDER BY id DESC   )arc, dede_soft b   WHERE arc.id = b.aid   GROUP BY `shorttitle`   ORDER BY `id` DESC   LIMIT 0 , 30   删除的话也很简单的了  代码如下 复制代码 delete from people where people

mysql删除重复记录的sql语句与查询重复记录(1/4)

方法1 delete yourtable where [id] not in ( select max([id]) from yourtable group by (name + value)) 方法2 delete a from 表 a left join( select (id) from 表 group by name,value )b on a.id=b.id where b.id is null 查询及删除重复记录的sql语句 查询及删除重复记录的sql语句 1.查找表中多余的重复记录

sql select查询重复记录的sql语句

在A表中存在一个字段"name", 而且不同记录之间的"name"值有可能会相同, 现在就是需要查询出在该表中的各记录之间,"name"值存在重复的项: Select Name,Count(*) from A Group By Name Having Count(*) > 1 如果还查性别也相同大则如下: Select Name,sex,Count(*) from A Group By Name,sex Having Count(*) &g

mysql删除重复记录的sql语句与查询重复记录

方法1 delete yourtable where [id] not in ( select max([id]) from yourtable group by (name + value)) 方法2 delete a from 表 a left join(select (id) from 表 group by name,value)b on a.id=b.id where b.id is null 查询及删除重复记录的sql语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopl

sql 过滤重复记录和查询重复记录

--查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段  代码如下 复制代码 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID FROM tmpTable GROUP BY RoleID HAVING (COUNT(*) > 1) 获取重复记录 SELECT DISTINCT * FROM tmpTable 过滤重复记录

sql查询重复记录、删除重复记录方法大全

查找所有重复标题的记录: ? 1 SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一.查找重复记录 1.查找全部重复记录 ? 1 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条) ?

sql中查询重复记录与删除重复记录

1.查找全部重复记录  代码如下 复制代码 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条)  代码如下 复制代码 Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 SQL Server删除重复行是我们最常见的操作之一,下面就为您

总结SQL查询重复记录并删除的方法【老师说值得收藏】

查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC  一.查找重复记录 1.查找全部重复记录 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)  2.过滤重复记录(只显示一条) Select *