`
逆风的香1314
  • 浏览: 1415993 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

查询重复记录

Go 
阅读更多

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
--*/

 
 

分享到:
评论

相关推荐

    sql查询重复记录方法大全

    ### SQL查询重复记录方法大全 在数据库管理与维护过程中,查询和处理重复记录是一项非常重要的工作。本文将详细介绍几种常见的SQL查询重复记录的方法,并提供具体的示例代码。 #### 方法一:查询具有重复值的记录...

    SQL语句查询重复记录大全

    查询重复记录的基础方法 - **基本原理**:通过`GROUP BY`和`HAVING`子句来筛选出现次数多于一次的记录。 - **SQL示例**: ```sql SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) &gt; 1;...

    sql查询重复记录语句

    本文将深入解析几种常见的SQL查询重复记录的方法,并通过示例代码加以说明,帮助读者更好地理解和掌握这些技巧。 ### SQL查询重复记录方法概览 #### 方法一:查询所有重复记录 首先,我们来看一种查询所有重复记录...

    oracle 查询出每组中最大的三个记录和查询重复记录

    接下来,我们来看如何查询重复记录。在Oracle中,可以使用`GROUP BY` 和 `HAVING` 子句来实现这个功能。假设我们有一个`users`表,想要找出所有重复的邮箱地址,可以编写以下查询: ```sql SELECT email, COUNT(*) ...

    sql_查询重复记录方法大全.txt

    根据提供的文件信息,我们可以深入探讨SQL中查询重复记录的各种方法及其应用场景。首先,我们来解析一下文件中的示例代码,并在此基础上进一步扩展相关的知识点。 ### 查找所有重复标题的记录 文件中的第一个示例...

    excel中查询重复记录并求和共1页.pdf.zip

    这份名为“excel中查询重复记录并求和共1页.pdf.zip”的压缩包文件很可能是提供了一个关于如何在Excel中执行这个操作的教程。尽管无法直接在文本中提供PDF的具体内容,但根据标题和描述,我们可以详细地讨论一下在...

    重复记录查询处理

    #### 二、查询重复记录 重复记录的查询通常涉及两种情况:基于单一字段的重复记录查询以及基于多个字段的重复记录查询。 ##### 1. 单一字段的重复记录查询 假设有一个表`people`,其中包含`peopleId`字段。我们希望...

    查询及删除重复记录的SQL语句.

    1. **查询重复记录**: 当我们想找出基于单一字段(如 `Id`)的重复记录时,可以使用如下的 SQL 语句: ```sql select * from 表 where Id in (select Id from 表 group by Id having count(Id) &gt; 1) ``` 这个...

    Oracle查询重复数据与删除重复记录方法

    使用ROWID删除重复记录时,可以采用与查询重复记录类似的方法,但操作变为删除。 ```sql DELETE FROM table1 a WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM table1 b WHERE a.name1 = b.name1 AND a.name2 = b....

    plsql删除重复记录

    #### 查询重复记录 在开始删除重复记录之前,首先需要确定哪些记录是重复的。以下SQL语句可以用来查询`test`表中所有字段都重复的记录: ```sql SELECT * FROM test GROUP BY name, age, sex, id, sf HAVING COUNT...

    Oracle查询重复数据与删除重复记录方法(txt)

    与查询重复记录类似,我们也可以使用GROUP BY和HAVING子句来删除重复记录。 ```sql DELETE FROM student GROUP BY num HAVING COUNT(num) &gt; 1; ``` 3. **使用DISTINCT** 在使用DISTINCT去重之后,我们...

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) &gt; 1) 2、...

    oracle删除重复记录

    ### 二、查询重复记录 在删除重复记录之前,首先需要确定哪些记录是重复的。这一步骤非常重要,因为它可以帮助我们验证是否有真正的重复记录存在,并且了解重复的程度。 #### SQL查询示例 假设有一个名为`...

    sql重复记录操纵汇总

    **一、查询重复记录** 1. **多字段重复查询**: 使用自连接可以查询多字段同时重复的记录。例如,对于人员表`peosons`,可以使用如下SQL: ```sql SELECT p1.* FROM persons p1, persons p2 WHERE p1.id &lt;&gt; p2...

    用SQL删除重复记录的N种方法

    -- 查询重复记录 SELECT * FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) &gt; 1 ); -- 删除重复记录,只保留具有最小`rowid`的记录 DELETE FROM ...

    删除数据表中重复记录

    2. **标记重复记录**:可以创建一个临时表或使用子查询来标记出需要删除的重复记录。 3. **执行删除操作**:基于标记好的记录执行删除操作。 #### 示例代码解析 以下是一段示例SQL脚本,用于演示如何删除表`a`中的...

    (参考)查询和删除同一表内一个或多个字段重复记录的SQL语句.pdf

    首先,查询重复记录的基本思路是通过比较表中的每一条记录与其他记录的对应字段是否相同。例如,在人员表`peosons`中,如果想要找出姓名、身份证号、住址完全相同的记录,可以使用以下SQL语句: ```sql SELECT p1.*...

    在SQL中删除重复记录多种方法

    ### 查询重复记录 你可以使用以下查询来找出重复的记录: ```sql SELECT * FROM employee GROUP BY emp_id, emp_name, salary HAVING COUNT(*) &gt; 1; ``` 这将返回那些在`emp_id`, `emp_name`, 和 `salary`字段上...

Global site tag (gtag.js) - Google Analytics