首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008 R2 -在这种情况下,Server触发器实际上是如何工作的?

问Server 2008 R2 -在这种情况下,Server触发器实际上是如何工作的?
EN

Database Administration用户
提问于 2018-10-13 08:07:53
回答 2查看 194关注 0票数 1

我有一个名为_Test的表,其中存储了以下值。

主键: Id

我还在那张桌子上设计了一个触发器

代码语言:javascript
复制
ALTER Trigger [dbo].[_Test_Data_Save]
On [dbo].[_Test]
For Insert
As

--Some custom algorithm which takes about 2-3 seconds to complete

现在,3条记录被保存在同一微秒内的3个不同的会话中,如下图所示。

问题

现在我的问题是,最后3项记录的触发器将如何工作?最后三个记录会触发三个不同的触发器吗?

  1. 同时
  2. 一个接一个地(根据保存的顺序)
  3. 按任意顺序排列,SQL似乎是合适的。

如果没有一个一个地执行触发器,那么我能做什么,以便他们首先为Id=5记录执行触发器,然后在完成该Id=6之后,然后为Id=7执行触发器。

EN

回答 2

Database Administration用户

发布于 2018-10-13 14:20:56

触发器代码在调用它的事务的范围内执行。正如您所述,这三条记录中的每一条都是由单独的会话插入的,这意味着完成了三个不同的事务,每个事务都插入了一个记录并执行了该记录的触发代码。

如果“同时”启动三个(或更多)事务,则无法控制执行事务的各个部分在设置事务隔离级别之后的执行顺序。如果隔离级别设置为可序列化,则触发器代码将逐个执行“(根据保存的顺序)”;否则,它似乎会“按SQL似乎合适的任意随机顺序运行”,这取决于每个事务所获得的任何锁。

票数 2
EN

Database Administration用户

发布于 2018-10-13 09:04:31

警告:由于我没有足够的声誉,我不能写评论,这是一个评论。

AFAIK SQL server仅对每个语句触发器具有。这意味着触发器将同时修改行。

如果要更新每一行,一个解决方案是使用游标,而游标是性能的杀手。也许更有技能的人有更好的方法。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/220001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档