第十三部分 触发器

1.    触发器:他是一种特殊的存储过程,并且它可以在SQL Server进行某个特定的表修改时由SQL Server自动执行,它还是一种实施完整性约束的手段。它是针对数据表(库)的特殊存储过程,当这个表发生了insert、update或delete操作时,会自动激活执行,可以处理各种复杂的操作。
2.    触发器的作用:
完成比约束更复杂的数据约束;
检查所做的SQL操作是否允许;
修改表里的数据;
调用更多的存储过程;
返回自定义的错误信息;
更改原本要操作的SQL语句;
防止数据表结构更改或数据表被删除。
3.    触发器的两个专用表:inserted表和deleted表(它们为两个逻辑临时表,由系统维护)
4.    触发器的分类:DML触发器(又分为After触发器和Instead Of触发器)、DDL触发器
5.    DML触发器是响应INSERT、UPDATE或DELETE语句而激活的,DDL触发器是响应以CREATE、ALTER或DROP开头的语句而激活的
6.    注意:
After触发器只能用于数据表中,Instead Of触发器可以用于数据表和视图上,但两种触发器都不可以建立在临时表上;
一个数据表可以有多个触发器,但是一个触发器只能对应一个表;
在同一个数据表中,对每个操作而言可以建立许多个After触发器,但Instead Of触发器针对每个操作只能能建立一个;
如果针对某个操作既设置了After操作又设置了Instead of触发器,那么Instead Of触发器一定会激活,而After触发器就不一定会激活了;
Truncate Table语句虽然类似于Delete语句可以删除记录,但是它不能激活delete类型的触发器;
WRITETEXT语句不能触发INSERT和UPDATE型的触发器;
不同的SQL语句,可以触发同一个触发器。
7.    SQL语句创建DML触发器:
CREATE TRIGGER [schema_name .] trigger_name
ON { table | view }
[WITH <dm1_trigger_option> [,…n] ]  
{FOR | AFTER | INSTEAD OF}
{ [ INSERT ] [,][update] [,][delete]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS {sql_statement [;] [,…n] | EXTERNAL NAME <method specifier [;]>}
<dm1_TRIGGER_OPTION> ::=
     [ENCRYPTION ]
     [EXECUTE AS Clause ]
<method_specifier>::=
     Assembly_name.class_name.method_name
8.    sp_helptext/sp_help
9.    修改触发器
ALTER TRIGGER [schema_name .] trigger_name
ON { table | view }
[WITH <dm1_trigger_option> [,…n] ]  
{FOR | AFTER | INSTEAD OF}
{ [ INSERT ] [,][update] [,][delete]}
 [NOT FOR REPLICATION]
AS {sql_statement [;] [,…n] | EXTERNAL NAME <method specifier [;]>}
<dm1_TRIGGER_OPTION> ::=
     [ENCRYPTION ]
     [EXECUTE AS Clause ]
<method_specifier>::=
     Assembly_name.class_name.method_name
GO
Sp_name [@trigger_name=] ‘trigger_name’,
   [@new trigger_name=] ‘new_trigger_name’
10.    禁用触发器:
Alter table table_name
Disable or Enable trigger trigger_name or ALL
11.    DDL触发器的创建
CREATE TRIGGER  trigger_name
ON {ALL SERVER | DATABASE }
[WITH <ddl_trigger_option> [,…n] ]  
{FOR | AFTER | }
{event_type ->event_group}[,…n]
AS {sql_statement [;] [,…n] | EXTERNAL NAME <method specifier [;]>}
<dm1_TRIGGER_OPTION> ::=
     [ENCRYPTION ]
     [EXECUTE AS Clause ]
<method_specifier>::=
     Assembly_name.class_name.method_name
12.    管理DLL触发器:
CREATE TRIGGER/DROP TRIGGER/ALTER TRIGGER/sp_name/DISABLR TRIGGER/ENABLE TRIGGER
posted @ 2012-11-15 18:20  i Traveling Light  阅读(169)  评论(0)    收藏  举报