可以先把不重复的生成到一个新表中不就行了,你可以参考下面的语句
--exec up_distinct 'a_dist','id','name'
if exists (select * from sysobjects where objectproperty(object_id('up_distinct'), 'IsProcedure') = 1)
drop procedure up_distinct
GO
create procedure up_distinct(@t_name varchar(30),@f_key varchar(30),@f_name varchar(30))
--f_key表示是分组字段,即主键字段
as
begin
declare @max integer,@id varchar(30) ,@name varchar(30) ,@sql varchar(7999)-- ,@type integer
select @sql = 'declare cur_rows cursor for select '+@f_key+','+@f_name+' ,count(*) from ' +@t_name +' group by ' +@f_key+','+@f_name +' having count(*) > 1'
exec(@sql)
open cur_rows
fetch cur_rows into @id,@name,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
/*elect @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key
if @type=56 */
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id --+' and ' + @f_name +' = '+ @name
/*if @type=167
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +'''' */
exec(@sql)
fetch cur_rows into @id,@name,@max
end
close cur_rows
deallocate cur_rows
set rowcount 0
end
这是存储过程!
温馨提示:答案为网友推荐,仅供参考