SQL服务器和触发器反映了更改顺序?

时间:2013-06-28 11:32:23

标签: sql-server triggers

假设我有一个表格,并设置after update触发器,用于更新相同更改行中的列。

是否承诺在更新后但在某人尝试读取值之前立即执行触发器?

示例:

有一个更新触发器,将"IsNameSet"设置为1(修改name时)

update myTable set name="a" where id={...}

然后立即(!)

select IsNameSet from myTable where id=...{modified row id}

是否可以保证我始终会看到1

1 个答案:

答案 0 :(得分:2)

如果SELECTUPDATE事务(包括触发器)提交之前发生,则它取决于读取事务的隔离级别。

在未提交的读取时,它可以读取name="a" and IsNameSet = 0

如果是快照,它可以读取行的更新前值。否则,在UPDATE事务提交之前,它将被阻止读取行,并将读取“after”值。

根据具体要求,计算列可能比触发器更有效。