/**********************************************************************
*利用唯一非聚集索引,删除重复数据
*
*
***********************************************************************/
Alter PROCEDURE P_DelRepeatData
@TableName varchar(50), --表名
@COLUMNS Varchar(4000) -- 判断重复的列名
AS
BEGIN
--自增列
declare @AutoColumns varchar(50)
--执行脚本
declare @Sql varchar(8000)
--定义唯一非聚集索引
declare @IX varchar(50)
--利用系统时间生成自增列
set @AutoColumns='a'+Replace(Replace(Replace(Replace(Convert(varchar(20),getdate(),121),' ',''),'-',''),':',''),'.','')
--增加自增列和增加该字段的索引
set @Sql='alter table '+@TableName+' add '+@AutoColumns+' int not null identity(1,1)'
exec(@Sql)
--创建唯一非聚集索引
set @IX= 'IX_'+@AutoColumns
set @Sql=' CREATE UNIQUE INDEX '+@IX+' ON '+@TableName+'('+@AutoColumns+')'
exec(@Sql)
-- Print @Sql
--删除重复数据
set @Sql= ' delete from '+ @TableName + ' where '+@AutoColumns+' not in (
select max('+@AutoColumns+') from '+@TableName+' group by '+@COLUMNS+')'
--Print @Sql
exec(@Sql)
--删除建立的字段和索引
set @Sql=' IF EXISTS (SELECT name from sys.indexes
WHERE name = N'''+@IX+''')
DROP INDEX '+@IX+' ON '+@TableName+'
alter table '+@TableName+' DROP COLUMN '+@AutoColumns
-- Print @Sql
exec(@Sql)
END
GO