如何在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
我觉得没有必要,只需要在提交的时候插入一个查找命令看是否有相同的数据存在,然后禁止插入数据就可以了阿!何必这么麻烦呢???

...过程实现对表数据的删除 修改和添加!(sql server数据库)
1、使用账户和密码,连接到自己的数据库。2、 找到自己的数据库->【可编程性】->存储过程。3、 打开【存储过程】的子菜单,显示的存储过程如图所示。可以找到详细信息。4、 选中存储过程,右键菜单中选择【修改】。5、存储过程或者函数 显示代码如图所示,即可以修改。6、或者右键菜单中选择【编写存储...

Sql Server表里面有2行数据完全一样,如何删除
一:保留重复记录中的一条记录,其他全部删除。--1:建立临时表,把不重复的数据转存 select distinct * into #Tmp from 表名;--2:删除原表数据 truncate table 表名;--3:将数据导回 insert into 表名 select * from #Tmp;--4:删除临时表 drop table #Tmp;二:删除全部重复记录:delete ...

SQL Server怎样实现删除一条纪录的同时将表中所有相关记录删除?
如果是在一张表里面,直接删除学号,其它信息都没有了。如果不是一张表,而是放在子表里面,那就设置好外键,并且设置外键的删除更则为“级联”。

SQL Server的存储过程怎么写?
首先准备数据,测试存储过程 use ssqadm;创建测试books表 create table books_test ( book_id int identity(1,1) primary key,book_name varchar(20),book_price float,book_auth varchar(10));插入测试数据 insert into books_test (book_name,book_price,book_auth)values ('论语',25.6,'孔子...

使用SQL语句创建存储过程
使用SQL语句创建存储的具体过程如下:1、首先,打开企业管理器,选择【工具】-【查询分析器】:2、然后,输入SQL语句。如下:CREATE PROCEDURE byroyalty1 @percentage int AS select au_id from titleauthor where titleauthor.royaltyper = @percentage GO 3、然后,点击确定之后,命令就会自动添加进查询...

如何在sql创建一条插入数据的存储过程
1、首先需要打开SQL Server Managment管理工具,新建一个表。2、然后在表中插入一些样例数据。3、接下来在SQL Server Managment中右键单击可编程性,选择新建存储过程。4、然后在SQL编写界面中编写SQL语句,注意这里的@name就是接收的输入参数。5、编写好存储过程,执行一下,就会在可编程性下面找到创建的...

SQL触发器问题?实现每天晚上12点删除某个表的全部数据.
1.先创建一个存储过程用来删除表中数据。2.创建一个job用来每天12点执行这个存储过程。由于不知道你用的时sql server还是oracle具体的过程就不给你创建了。

sql server存储过程产生连续不重复编号
首先你需要建立一张表,用来存储你的新产生不重复ID的编号!就随便打个比方嘛:CREATE TABLE [dbo].[_sysIDType]([KeyID] [int] IDENTITY(1,1) NOT NULL, ---这个是ID表编号 [codeflag] [nvarchar](5) COLLATE Chinese_PRC_CI_AS NULL, ---这个是ID开头字母 [codelength] [int] NULL...

sql server 如何用sql语句实现单个表的备份和还原。
SQL SERVER 2008 怎么导入和导出单张表的数据和结构 (1)右击需要导出数据的数据库,在弹出式菜单中选择“任务”下的“生成脚本”选项。(2)在脚本向导的选择脚本选项中,将“编写数据的脚步”选择为TRUE,这里默认是为FALSE的。(3)然后下一步选择导出的对象,选择导出的表,最后完成时,即可以看到...

拜托大家帮忙设计一个Sql Server 2005 的存储过程。。。本人初学,却要...
BEGIN SELECT @sql='Alter Table '+@tableName+' alter column '+@col+' '+@type+'('+CAST(CAST(ISNULL(@len,0)*1.5 AS INT) AS VARCHAR(1000))+')'EXEC(@sql);END FETCH NEXT FROM cur INTO @col,@type;END;CLOSE cur;DEALLOCATE cur;END GO EXEC sp_columnAdd 'x'...

相似回答