如何在SQL Server里面编写一个存储过程,来实现删除一个表中的重复记录?
问题描述:如何在SQLServer里面编写一个存储过程,来实现删除一个表中的重复记录,对于重复的记录只保留一条即可。再问,对于这个存储过程是否可以让SQLServer每次...
问题描述:如何在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
/**
要实现以斗宽上过程在指定时间内执行
可以用数据库的管理中的作业作实现,很简单,这里不详述了
希望这个方法对你有用穗简
**/
假设你要处理的表名是: 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
/**
要实现以斗宽上过程在指定时间内执行
可以用数据库的管理中的作业作实现,很简单,这里不详述了
希望这个方法对你有用穗简
**/
展开全部
开始执行或者开始执行的时间,以前做过,但是现在忘记了,集中搂住的重复问题
解决搂住的问题有三种方法,第一个是使用渣芹游标,因为数据量大,手蔽所以排除,第二种是判断删除,也因为数据量大,排除,现在使用批量处理的方法,希望对搂住有些帮助,(简单的写一下,楼主自己完善)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
解决搂住的问题有三种方法,第一个是使用渣芹游标,因为数据量大,手蔽所以排除,第二种是判断删除,也因为数据量大,排除,现在使用批量处理的方法,希望对搂住有些帮助,(简单的写一下,楼主自己完善)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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个临时慎伏坦表记录一条你需要删除宽桐其重复项的记录, 然后用DELETE删除表里面的记录后再厅裤INSERT回去。
具体CREATE PROCEDURE可以看MYSQL\DOCS\MANUAL.CHM
具体CREATE PROCEDURE可以看MYSQL\DOCS\MANUAL.CHM
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是我,纯差余我就会偷懒:
用access连接sql
用access的自动生做滚成的查找重复项查询
然后庆伏删除
用access连接sql
用access的自动生做滚成的查找重复项查询
然后庆伏删除
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得没有必要,只需要在提交的时候插入一个查找虚码命令看是否有相同的数据差唯哪存在,然后禁止插入数山陪据就可以了阿!何必这么麻烦呢???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询