zoukankan      html  css  js  c++  java
  • 查询重复记录

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


  • 相关阅读:
    Java中的Date类型无法赋值给数据库的datetime类型
    在HTML中改变input标签中的内容
    sizeof计算类的大小
    UML类图,转载
    大端小段详解—转载
    leetcode练习
    linux基础
    排序算法和查找算法

    链表
  • 原文地址:https://www.cnblogs.com/ghd258/p/260769.html
Copyright © 2011-2022 走看看