很久没弄触发器,代码都忘记了,今天无意中朝花夕拾。
SqlServer自2005版本触发器可以分为两个版本:DML和DDL触发器。
1.DML触发器又分为:
1) after触发器(之后触发)
a、 insert触发器
b、 update触发器
c、 delete触发器
其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。
2) instead of 触发器 (之前触发)
instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。
drop trigger repair_trigger_del --删除触发器 use DataBase --数据库 go create trigger repair_trigger_del --触发器名称 on repair --触发器对应的表 after delete --delete操作后 as insert into repair_del select *,getdate() from deleted --将删除的数据插入新表 go --查询触发器 select * from sys.objects where type = 'TR'
2.DDL触发器:
1) 禁止用户修改和删除表;
2) 禁止用户删除数据库;
3) 记录和监控某数据库所有的DDL操作;
4) 把DDL操作信息以邮件的形式主动发送通知和预警;
--创建DDL触发器:禁止修改或者删除数据表 CREATE TRIGGER DDL_TableTrigger ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT '对不起,您不能对数据表进行操作,请联系DBA' ROLLBACK ; --测试删除表 USE DDL_DB GO DROP TABLE [DatabaseLog]