我补充几点:1.sqlserver无before类型的dml触发器。 2.设对ta表建有before insert触发器(oracle) 执行对ta insert记录时,先执行insert语句,再执行 before触发器,然后提交insert语句本身。设对ta表建有instead of insert触发器(mssql) 执行对 ta insert记录时, 先执行insert语句,再执行instead触发器, 之后insert语句被回滚(即,被触发器内部逻辑的替换,能不能插入数据,看触发器里是否有插入操作)从这点上来说,before触发器和instead触发器有很大区别,连相似都谈不上。3.到于楼主你自己所说的 for和after好像是一样的,对于你的例子来说,确实是一样的,但它们之间是有区别的,这里我就不多说了,引用联机丛书一段话 ------------------------------------------------------------------------------------------------------------------ AFTER指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 FOR 关键字,则 AFTER 是默认设置。不能在视图上定义 AFTER 触发器。
http://blog.csdn.net/jinjazz/archive/2008/12/01/3420299.aspx
2.设对ta表建有before insert触发器(oracle)
执行对ta insert记录时,先执行insert语句,再执行 before触发器,然后提交insert语句本身。设对ta表建有instead of insert触发器(mssql)
执行对 ta insert记录时, 先执行insert语句,再执行instead触发器, 之后insert语句被回滚(即,被触发器内部逻辑的替换,能不能插入数据,看触发器里是否有插入操作)从这点上来说,before触发器和instead触发器有很大区别,连相似都谈不上。3.到于楼主你自己所说的 for和after好像是一样的,对于你的例子来说,确实是一样的,但它们之间是有区别的,这里我就不多说了,引用联机丛书一段话
------------------------------------------------------------------------------------------------------------------
AFTER指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 FOR 关键字,则 AFTER 是默认设置。不能在视图上定义 AFTER 触发器。