SQL触发器(有同步update的例子)
触发器分为:DML触发器、DDL触发器、登录触发器
原理如表格所示
对表的操作 | inserted表 | deleted表 |
---|---|---|
增加记录(insert) | 存放增加的记录 | 无 |
删除记录(delete) | 无 | 存放被删除的记录 |
修改记录(update) | 存放更新后的记录 | 存放更新前的记录 |
insert:
当对表进行INSERT操作时,INSERT触发器被激发,新的数据行被添加到创建触发器的表和Inserted表。
delete:
先将要删除的记录存放在Deleted表里,然后把数据表里的记录删除,再激活After触发器,执行After触发器里的SQL语句。执行完毕之后, 删除内存中的Deleted表,操作结束。
update :
生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除修改表里的旧的记录并写入新纪录。
update例子:
创建触发器trigger_2,实现当修改“学生表”中的某个学生的学号时,对应“学生作业表”中的学号也作修改。
use study
go
create trigger trigger_2
on student
for update
as
if update(stdid)
begin
update sw
set stdid = inserted.stdid
from sw ,deleted,inserted
where sw.stdid = deleted.stdid
end
go
查看student表的触发器
exec sp_helptrigger 'student'
查看trigger_2触发器的定义文本
EXEC sp_helptext 'trigger_2'
删除student表的trigger_2触发器
drop trigger trigger_2
修改DML触发器的语法格式如下:
ALTER TRIGGER schema_name.trigger_name
ON ( table | view )
[ WITH ENCRYPTION ]
{ FOR | AFTER | INSTEAD OF }
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE] }
AS sql_statement [ ; ]
修改DDL触发器的语法格式如下:
ALTER TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH ENCRYPTION ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS sql_statement [ ; ]
使触发器无效:
DISABLE TRIGGER { [ schema.] trigger_name [ ,...n ]
| ALL }
ON object_name
使触发器有效:
ENABLE TRIGGER {[schema_name.] trigger_name
[ ,...n ] | ALL }
ON object name
记录数据库的网课学习
赞 (0)