如何在SQL Server里面编写一个存储过程,来实现删除一个表中的重复记录?

问题描述:如何在SQL Server里面编写一个存储过程,来实现删除一个表中的重复记录,对于重复的记录只保留一条即可。再问,对于这个存储过程是否可以让SQL Server每次启动时自动来运行呢,或者是配置成定时来自动运行?因为,数据库中的数据是即时更新的,而且容易产生重复的记录,所以才想编一个可以自动运行的存储过程来过滤表中的重复数据。

不知我的描述是否清楚,请大家帮忙指教一下,谢谢!
因为我的数据量非常大,在提交每条数据之前都判断是否有重复的记录的话,那么程序执行起来很慢

/*******
假设你要处理的表名是: pludetail
可以用以下过程来实现,速度不在下面过程的考虑之中
*********/
create procedure distinct_deal
as
begin

begin transaction

select distinct * into #tempdel from pludetail --提取无重复的记录到临时表中

truncate table pludetail --清掉原表

insert pludetail
select * from #tempdel --把临时表中无重复的数据插回原表
drop table #tempdel

if @@error<>0
begin
raiserror('数据处理失败!',16,-1)
goto error_deal
end

commit transaction
return
error_deal:
rollback transaction
return

end

/**

要实现以上过程在指定时间内执行
可以用数据库的管理中的作业作实现,很简单,这里不详述了
希望这个方法对你有用

**/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-01-10
开始执行或者开始执行的时间,以前做过,但是现在忘记了,集中搂住的重复问题
解决搂住的问题有三种方法,第一个是使用游标,因为数据量大,所以排除,第二种是判断删除,也因为数据量大,排除,现在使用批量处理的方法,希望对搂住有些帮助,(简单的写一下,楼主自己完善)0
create proc ss
as
begin
--插入临时表
select zi(省略其他字段.....)
into #aa
from biao
group by
zi(.....)
--删除标的数据
delete from biao
--重新插入
insert into
biao
from
#aa
--事务处理(这一步很必要,否则删除后没有会滚,后果不堪设想)
if @error<>0 goto ER
commint transaction
end
ER:
print 'error'
rollback transaction
第2个回答  2007-01-10
用一个临时表记录一条你需要删除其重复项的记录, 然后用DELETE删除表里面的记录后再INSERT回去。
具体CREATE PROCEDURE可以看MYSQL\DOCS\MANUAL.CHM
第3个回答  2007-01-10
如果是我,我就会偷懒:
用access连接sql
用access的自动生成的查找重复项查询
然后删除
第4个回答  2007-01-10
我觉得没有必要,只需要在提交的时候插入一个查找命令看是否有相同的数据存在,然后禁止插入数据就可以了阿!何必这么麻烦呢???