触发器:一次向表中插入多次记录,触发器是执行一次还是每一条都执行一次?

lijingxiezhuying 2005-02-24 05:19:47
一次(用insert语句)向表中插入多次记录,触发器是执行一次还是每一条都执行一次?
我理解的是只执行一次,不知道对不对?
如果是,那么执行完了以后,inserted表中是什么内容,是所有插入的记录,还是最后一条记录呢?
...全文
1770 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijingxiezhuying 2005-03-25
  • 打赏
  • 举报
回复
up
jxwangjm 2005-03-23
  • 打赏
  • 举报
回复
UP
haodong2006 2005-03-23
  • 打赏
  • 举报
回复
兄弟,绝对是每次都执行,我试过的。
所以说,很多之前INSERT触发执行过的,在新的INSERT的时候又执行
(INSERT数据N次,里面有的地方就执行N次,其余是执行N-1,N-2.....1次。)
比如在表a上创建一个触发器向表b,c中添加数据:

create trigger tr_a
on a
for insert
as
begin
declare @x1,@x2.....@xm
set @x1=(select x from a where ..)
..................
insert b(....) values(x1....xm)

declare @x1,@x2.....@xn
set @x1=(select x from a where ..)
..................
insert c(....) values(x1....xm)

end
return
go

当执行一次向表a中添加数据的时候,向表b,c中添加一次数据
再添加其他数据的时候,又会向b,c 中添加重复的数据。
避免这种麻烦的就是用inserted表代替
或者向表a中添加数据时应该以这种方式:
delete a
insert a(.....) values(.......)
这样执行就可以解决楼主的疑问。
chengjinhuiJ021 2005-03-20
  • 打赏
  • 举报
回复
應該是每一條都執行啊 !! 執行一次觸發器就觸發一次,insert完成後當然表中會只有最後一條記錄啊。
haodong2006 2005-03-18
  • 打赏
  • 举报
回复
我也遇到同样的问题,假设插入N条记录,那么inserted表里的记录的N-1条记录
WhiteEat 2005-03-16
  • 打赏
  • 举报
回复
SQL SERVER 的触发器是语句级触发的,一个插入语句,无论插入多少行记录,都是触发一次。
lijingxiezhuying 2005-03-16
  • 打赏
  • 举报
回复
没人给出一个明确的答案.
here4u 2005-03-16
  • 打赏
  • 举报
回复
create table a (a1 int,a2 int)
go
create trigger tr_a on a for insert
as
select * from inserted
go

delete from a
insert a (a1,a2)
select 1,2
union all
select 2,3

delete from a
insert a (a1,a2)select 1,2
insert a (a1,a2)select 2,3

所影响的行数为 2 行)

a1 a2
----------- -----------
1 2
2 3

(所影响的行数为 2 行)


(所影响的行数为 2 行)

a1 a2
----------- -----------
1 2

(所影响的行数为 1 行)

a1 a2
----------- -----------
2 3

(所影响的行数为 1 行)

看了上面的结果大家应该可以明白了吧?
haodong2006 2005-03-15
  • 打赏
  • 举报
回复
执行一次
xja 2005-03-15
  • 打赏
  • 举报
回复
执行多次!
lijingxiezhuying 2005-03-15
  • 打赏
  • 举报
回复
up
lijingxiezhuying 2005-03-10
  • 打赏
  • 举报
回复
up
liqunen 2005-03-09
  • 打赏
  • 举报
回复
------------
强列关注
----------------
lijingxiezhuying 2005-03-09
  • 打赏
  • 举报
回复
一次
zdj112 2005-03-09
  • 打赏
  • 举报
回复
多次
qzxyd 2005-03-09
  • 打赏
  • 举报
回复
只执行一次的,所所在写触发器时一定要注意修改要这样写
update table set a='要改的' where b in(select c from inserted)
lijingxiezhuying 2005-03-09
  • 打赏
  • 举报
回复
up
lijingxiezhuying 2005-03-05
  • 打赏
  • 举报
回复
up
jzdmyjzd 2005-03-04
  • 打赏
  • 举报
回复
在数据提交的过程中,如果利用触发器对数据库进行更新或插入操时,在进行批量操作时只针对批量更新或插入操作的一条记录起作用,如果要解解本问题可以采用游标对数据库进行操作。
rfq 2005-03-04
  • 打赏
  • 举报
回复
一次插入多行,只触发一次。
加载更多回复(23)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧