刚才您解答我一个问题,就是http://topic.csdn.net/u/20080518/11/6dd3ebf5-79dd-4208-a127-e6ad05ebcee3.html这里这个,我还有一个问题想问一下,看看有没有解决方法。
aaa(id ,other)
如果删除aaa表内的数据同时激活delete触发器,向ccc(bh,id,other)表内插入已删除的数据,
ccc表字段增加一个bh(编号)字段,bh不是自动增加
目前的逻辑是:我需要先取得ccc里面bh最大值 ,然后从aaa触发器deleted表内逐条取出,让bh+1 增加至ccc
加入16000条,要执行5分钟左右,有大量得io操作。)
触发器的大致代码如下
- SQL code
declare @maxcount int --保存ccc表内 bh 最大值declare @countnum int --保存需要插入的数据一共多少条decalre @current int --保存当前插入第几条set @current =1set @countnum=0set @maxcount=(select top 1 bh from ccc order by bh desc)--取得ccc内 bh 最大值--ccc表可能为空值所以要判断if @maxcount is nullset @maxcount=0select dataid=indentity(int,1,1),* into #tempccc from deleted --建立临时表,含有自动编号set @countnum=(select count(1) from #tempccc) --取得一共需要插入ccc内几条数据while @current <= @countnum --当前插入编号 小于最大编号beginset @[email protected]+1 --ccc内 bh 最大值+1insert into ccc(bh,id,other) select @maxcount,id,other from #tempjsxxb where [email protected] --把当前的一条数据插入ccc bh用cc内最大值+1 set @[email protected] +1 --当前编号+1enddrop table #tempjsxxb
以上是触发器简化的流程,主要目的就是为了删除aaa内数据同时给ccc内增加数据并且bh每次要增加1
在执行时候速度比较慢,所以请问下有没有别的改善方法?
能不能循环时候不让更新,一次更新几百条?会不会快点?
或者采取别的什么方法?
------解决方案--------------------
先看看
------解决方案--------------------
- SQL code
declare @maxcount int --保存ccc表内 bh 最大值set @maxcount=(select top 1 bh from ccc order by bh desc)--取得ccc内 bh 最大值select dataid=indentity(int,1,1),* into #tempccc from deleted --建立临时表,含有自动编号insert into ccc(bh,id,other) select isnull(@maxcount,0)+dataid,id,other from #tempjsxxb
------解决方案--------------------
没必要循环插入,[email protected],一次插入。
------解决方案--------------------
ccc表字段增加一个bh(编号)字段,bh不是自动增加
---------------
你把这个字段设置成自动增加,那更简单,直接:
insert into ccc(id,other) select id,other from deleted
------解决方案--------------------
- SQL code
create table #ccc (bh int)select top 3 dataid=identity(int,1,1) into #1 from syscolumnsselect top 4 dataid=identity(int,1,1) into #2 from syscolumnsdeclare @maxcount int --保存ccc表内 bh 最大值set @maxcount=(select top 1 bh from #ccc order by bh desc)--取得ccc内 bh 最大值insert #ccc select isnull(@maxcount,0)+dataid from #1select * from #ccc/*bh-----------123*/godeclare @maxcount int --保存ccc表内 bh 最大值set @maxcount=(select top 1 bh from #ccc order by bh desc)--取得ccc内 bh 最大值insert #ccc select isnull(@maxcount,0)+dataid from #2select * from #ccc/*bh-----------1234567*/godrop table #ccc,#1,#2
------解决方案--------------------