13.3.2 创建触发器 1、 创建触发器的语句:CREATE TRIGGER,语法为:/ A" A4 I7 K" l B
CREATE TRIGGER 触发器名称4 W2 ]1 B+ m* x6 Y% A
ON {表名| 视图名}
2 d, U* o$ J! Q, a, T& k3 R9 R [WITH ENCRYPTION]' Z! @2 Y& C( r7 o' P
{FOR |AFTER|INSTEAD OF}{[INSERT][,][DELETE][,][UPDATE]}: Y! `) I+ N2 E+ c9 q
AS
0 D# D6 v) m: {- N! T S4 ? [{IF UPDATE(column)…}]
9 |1 q& Y I. y; b3 r7 s SQL语句* D4 v0 z) R8 t2 P
(1) 触发器名称在数据库中必须是惟一的;( R6 n' [$ c, p% Z" \' s
(2) ON子句用于指定在其上执行触发器的表;
0 N, k( i; q# V* }# K6 H6 X) Z (3) AFTER:指定触发器只有在引发的SQL语句中指定的操作都已成功执行,并且所有的约束检查也成功完成后,才执行此触发器,这种触发器称为后触发型触发器;+ A5 d5 r; q2 |5 u$ l' a; ]
(4) FOR:作用同AFTER;
& g1 |" j2 x$ |; z3 X9 J1 P2 X5 L (5) INSTEAD OF:指定执行触发器而不是执行引发触发器执行的SQL语句,从而替代触发语句的操作,这种触发器称为前触发型触发器;
4 a( @' q$ r% s. X0 n (6) INSTERT、DELETE或UPDATE是引发触发器执行的操作,若同时指定多个操作,则各操作之间用逗号分隔;
& F; `* {& E' i' r3 d. Z) F 2、 创建触发器时,需要注意:+ n' b* x4 p7 R" G0 r4 d: T: P
(1) 在一个表上可以建立多个名称不同、类型各异的触发器,每个触发器可由三个操作引发;5 C; W2 n( ^7 } y; k$ K/ u
(2) 大部分Transact-SQL语句都可用在触发器中,但也有一些限制;
6 G+ B3 |7 m6 s3 r (3) 在触发器定义中,可以使用IF UPDATE子句测试在INSERT和UPDATE语句中是否对指定字段有影响;
" V* Z6 T- V& ~* w8 H (4) 通常不要在触发器中返回任何结果。
- Z/ W ~5 R0 g 3、 创建后触发型触发器
1 b0 L* H% Y: J8 G5 H 使用FOR或AFTER选项定义的触发器为后触发的触发器,即只有在引发触发器执行语句中指定的操作都已完成执行,并且所有的约束检查也成功完成后,才执行的触发器;7 @ I2 a- C3 O6 t/ M" k
4、 创建前触发型触发器8 z7 m6 h8 A# F) X3 s5 C. n2 l$ d
使用INSTEAD OF 选项定义的触发器为前触发型触发器,在该触发器中,指定执行触发器而不是执行引发触发器执行的SQL语句,从而替代引发语句的操作。" s% C( e+ u3 b# ?
13.4 查看、修改及删除对象
. \) v2 l1 s1 p* }+ } 13.4.1 查看对象+ h1 Y' h* p/ V: d
对于创建好的存储过程、函数可通过企业管理器和查询分析器查看这些对象的代码;
+ ]/ c! Q0 u8 ~& F" t' K 13.4.2 修改对象
; v1 t, J! S4 \, a( K 1、 修改存储过程:ALTER PROCEDURE1 ^8 s, z4 q+ K$ d X7 k
ALTER PROC 存储过程名
: w _4 @% M7 l% [- T. f! ` [{@参数名 数据类型}[=default][OUTPUT]][,…n]
1 r h7 a. ~5 v0 Z/ J AS, I! N- i/ b! S' c
SQL语句[…n]
, r/ l7 d2 } ?. E; b 修改与定义的语句基本一致,只将CREARE PROC 改成ALTER PROC;9 \/ v* X" r1 X) y- R# v% H7 h
2、修改用户自定义函数:
% E; g" D/ |5 b5 a 修改与定义的语句基本一致,只将CREARE FUNCTION 改成ALTER FUNCTION;
) V) {4 N" e m5 @! J1 T/ V! ? 3、修改触发器:, J$ I( h% B0 R9 z- ]
修改与定义的语句基本一致,只将CREARE TRIGGER 改成ALTER TRIGGER;
7 S% K( D8 R0 j' y7 Z6 y) |6 ]; S 13.4.3 删除对象8 @. X: z; q" r# {% t: e4 \
1、 删除存储过程:) _/ A: v0 M; d( E: S3 P( X
DROP PROCEDURE {存储过程名}[,…n];
( r2 A( Q- l0 C' L7 Z5 I 2、删除用户自定义函数
+ g. o5 t- `+ @( h DROP FUNCTION {[拥有者名.]函数名}[,…n]/ v& K# c7 R# _2 r
3、删除触发器7 ?) J& f, o, z, w6 `0 y3 C
DROP TRIGGER {触发器名}[,…n] |