–execute as –指定用于执行该触发器的安全上下文。 允许您控制 sql server 实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。 –内存优化表上的触发器需要使用此选项。 –execute as clause
–for | after –after 指定 dml 触发器仅在触发 sql 语句中指定的所有操作都已成功执行时才被触发。 所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。 –如果仅指定 for 关键字,则 after 为默认值。 –不能对视图定义 after 触发器。 { for | after }
–指定应该再添加一个现有类型的触发器。 with append 不能与 instead of 触发器一起使用。如果显式声明了 after 触发器,则也不能使用该子句。 –仅当为了向后兼容而指定了 for 时(但没有 instead of 或 after)时,才能使用 with append。 如果指定了 external name(即触发器为 clr 触发器),则不能指定 with append。 –with append
–指示当复制代理修改涉及到触发器的表时,不应执行触发器。 –not for replication
as begin sql_statement end go
示例:
–声明数据库引用 use testss; go
–判断是否存在触发器,如果存在则删除 if exists(select * from sysobjects where name=’inserttri’) drop trigger inserttri; go
–execute as –指定用于执行该触发器的安全上下文。 允许您控制 sql server 实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。 –内存优化表上的触发器需要使用此选项。 –execute as clause
–for | after –after 指定 dml 触发器仅在触发 sql 语句中指定的所有操作都已成功执行时才被触发。 所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。 –如果仅指定 for 关键字,则 after 为默认值。 –不能对视图定义 after 触发器。 for
–{ [delete] [,] [insert] [,] [update] } –指定数据修改语句,这些语句可在 dml 触发器对此表或视图进行尝试时激活该触发器。 必须至少指定一个选项。 在触发器定义中允许使用上述选项的任意顺序组合。 –对于 instead of 触发器,不允许对具有指定级联操作 on delete 的引用关系的表使用 delete 选项。 同样,也不允许对具有指定级联操作 on update 的引用关系的表使用 update 选项。 insert
–指定应该再添加一个现有类型的触发器。 with append 不能与 instead of 触发器一起使用。如果显式声明了 after 触发器,则也不能使用该子句。 –仅当为了向后兼容而指定了 for 时(但没有 instead of 或 after)时,才能使用 with append。 如果指定了 external name(即触发器为 clr 触发器),则不能指定 with append。 –with append
–指示当复制代理修改涉及到触发器的表时,不应执行触发器。 –not for replication
as begin declare @names nvarchar(50)=null; set @names=(select top(1) name from dbo.test1 order by id desc ); if(select @names) is not null begin insert into dbo.test2(name) values(@names); end end go
示例结果:
dml after insert触发器优缺点
优点:
1、在新增时可以实现比约束更为严格的约束检查。
2、可以实现表之间复杂的业务逻辑关联。
3、可以实现数据插入时自动添加日志表记录。
缺点:
1、可移植性差。
2、占用服务器资源,给服务器造成压力。
3、执行速度主要取决于数据库服务器的性能与触发器代码的复杂程度。
需要了解更多数据库技术:SQLServer之创建DML AFTER INSERT触发器,都可以关注数据库技术分享栏目—编程笔记