批量插入数据 如何执行触发器 请高手帮忙???

Reasoncool 天下商机网络科技有限公司 研发总监  2006-09-27 06:04:35
向目的表中一次性插入大量数据,可是触发器只对一行数据有效。

要对每一行插入数据都进行触发 请问如何实现。

除了 用游标
...全文
256 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wshuangminlg 2006-09-28
帮LZ顶
回复
myminimouse 2006-09-28
帮顶~
回复
Reasoncool 2006-09-27
sql server 不支持行级触发器 是吗
回复
Reasoncool 2006-09-27
目前是一次插入几万条记录 要提取每一条记录的数据 进行处理执行其他存储过程

谢谢 sp1234(能忍耐,该慢则慢,一步步来办。) 的回答

我还是有点不太明白

“例如一次插入100万条记录,应该首先删除所有索引、停止所有触发器,待插入记录完毕再重建。”


回复
create trigger [会计分录] --> create trigger kadfasdfakfskak on [会计分录]
回复
不过,如果是真正的“批量插入”,例如一次插入100万条记录,应该首先删除所有索引、停止所有触发器,待插入记录完毕再重建。
回复
你使用的是什么数据库?如果是SQL Server,它不是针对单条记录触发的,而是“本来就是”针对每一个批命令触发的。

因此SQL Server触发器都应该针对数据集进行设计,如果想当然地以为是单条记录,其实是错误的。例如:

create trigger [会计分录] after insert as
declare @d varchar
select @d=[会计账簿] from inserted
update [总分类账] set [分录数]=[分录数]+1 where [账簿]=@d
go

上面这个是错误的。如果测试不慎重,当你实际应用中插入两条以上记录的时候,这个触发器就是系统中的一粒老鼠屎。

真正应该写:
create trigger [会计分录] after insert as
update x set [分录数]=x.[分录数]+i.n from [总分类账] as x
inner join (select [会计账簿],count(*) as n from inserted
group by [会计账簿]) as i on x.[账簿]=i.[会计账簿]
go
回复
Reasoncool 2006-09-27
是批量插入 执行一次insert 插入数条记录
回复
terryxin 2006-09-27
应该是每次有新数据都会触发的,你检查下触发器
回复
ralpha08 2006-09-27
触发器写的有问题,应该是每一次插入都会调用触发器的
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-09-27 06:04
社区公告
暂无公告