数据库开发

网络新概念,云计算、大数据、O2O、电商。。。。

有时候数据产生的重复项目,所有的列,下面是如果找出有重复数据的表并处理

declare @tblname varchar(200)
declare @object_id   int
declare tbl_cursor CURSOR for 
    select name,object_id from sys.all_objects where type='u'
open tbl_cursor
FETCH NEXT FROM tbl_cursor  INTO @tblname,@object_id

while @@FETCH_STATUS = 0
Begin
    declare @sql varchar(8000)
    declare @str varchar(8000)
    declare @selectstr varchar(8000)
    set @selectstr=''
    set @str=''
    --print @tblname,@object_id

    declare @colname varchar(200),@coltypeid int
    declare col_cursor CURSOR for
        select name,system_type_id from sys.columns where object_id=@object_id order by column_id
    open col_cursor
    FETCH NEXT FROM col_cursor INTO @colname,@coltypeid
    WHILE @@FETCH_STATUS = 0
    BEGIN
	if @coltypeid not in (189)
		set @str=@str+'['+@colname+'],'

       if @coltypeid not in (34,35,99,189)
		set @selectstr=@selectstr+'['+@colname+'],'

       FETCH NEXT FROM col_cursor INTO @colname,@coltypeid
    END
    close col_cursor
    deallocate col_cursor

    set @str=substring(@str,0,len(@str))
    set @selectstr=substring(@selectstr,0,len(@selectstr))
		print ' if (select count(*) from '+@tblname+')!=(select count(*) from (select distinct '+@selectstr+' from '+@tblname+') as a) begin '
		
		if exists(select * from sys.columns where OBJECT_ID=@object_id and is_identity=1)
			print ' print '' SET IDENTITY_INSERT '+@tblname+' ON'''

		print ' print '' select distinct '+@str+' into #tmpt from '+@tblname+' truncate table '+@tblname+'  insert into '+@tblname+'('+@str+') '''
		print ' print '' select '+@str+' from #tmpt drop table #tmpt ''' 

		if exists(select * from sys.columns where OBJECT_ID=@object_id and is_identity=1)
			print ' print  ''SET IDENTITY_INSERT '+@tblname+' OFF'''
		print ' print ''go'' '
		print ' end '


    fetch next from tbl_cursor into @tblname,@object_id
End

close tbl_cursor
deallocate tbl_cursor


TAG: sql