13.3.2 创建触发器
8 W, y6 O( a/ ]: K9 o; V( d$ F1、 创建触发器的语句:CREATE TRIGGER,语法为:/ N& d m7 Q) l- F: `# m
CREATE TRIGGER 触发器名称
' ]; z# @& @( x# R1 n, M* SON {表名| 视图名}
& t1 r0 r w ?! D; x* p4 F c[WITH ENCRYPTION]/ m( A e3 Y' O" X8 Q P
{FOR |AFTER|INSTEAD OF}{[INSERT][,][DELETE][,][UPDATE]}
8 S2 [! T$ y: e8 {3 P( R5 M& bAS
' R+ K# ~9 }/ u( x( Z( \+ N! @[{IF UPDATE(column)…}]! {; a3 y; } p9 I4 F) f4 H8 \ Q
SQL语句
; ^( I, ]3 Y- n" T2 M! z/ B(1) 触发器名称在数据库中必须是惟一的;
# m/ o' A$ b2 _(2) ON子句用于指定在其上执行触发器的表;
! N( l& l( A5 j+ Z) d5 _: O(3) AFTER:指定触发器只有在引发的SQL语句中指定的操作都已成功执行,并且所有的约束检查也成功完成后,才执行此触发器,这种触发器称为后触发型触发器;$ I. P( w& H, j
(4) FOR:作用同AFTER;
3 H$ ]5 ^ F1 O2 l7 m/ i(5) INSTEAD OF:指定执行触发器而不是执行引发触发器执行的SQL语句,从而替代触发语句的操作,这种触发器称为前触发型触发器;
9 r& [9 O. y( A1 G2 ]5 n! u(6) INSTERT、DELETE或UPDATE是引发触发器执行的操作,若同时指定多个操作,则各操作之间用逗号分隔;) j i J% g7 J: v$ e
2、 创建触发器时,需要注意:
. f, f) ]' N% r, }(1) 在一个表上可以建立多个名称不同、类型各异的触发器,每个触发器可由三个操作引发; u. ^" \' u9 v
(2) 大部分Transact-SQL语句都可用在触发器中,但也有一些限制;
1 E/ M2 E# N4 |, \$ T. K(3) 在触发器定义中,可以使用IF UPDATE子句测试在INSERT和UPDATE语句中是否对指定字段有影响;7 C# O1 R( p* D9 j% ?. ?
(4) 通常不要在触发器中返回任何结果。
4 q r @1 G# Q& S3、 创建后触发型触发器
7 K6 n* b" g' Q+ `% H使用FOR或AFTER选项定义的触发器为后触发的触发器,即只有在引发触发器执行语句中指定的操作都已完成执行,并且所有的约束检查也成功完成后,才执行的触发器;* B; K( d/ k( W, h9 }6 s5 ^
4、 创建前触发型触发器
1 ~) z% ^, a3 \' ~# X使用INSTEAD OF 选项定义的触发器为前触发型触发器,在该触发器中,指定执行触发器而不是执行引发触发器执行的SQL语句,从而替代引发语句的操作。( {: v; _# d) y4 [
13.4 查看、修改及删除对象8 [' o/ S& ^0 _6 p b
13.4.1 查看对象
4 D; v. o. b( q0 X对于创建好的存储过程、函数可通过企业管理器和查询分析器查看这些对象的代码;7 N4 f- g$ J$ p$ N) {' h+ r8 k& |
13.4.2 修改对象
2 Q: M: _5 @% G# A0 @8 ?1、 修改存储过程:ALTER PROCEDURE% q5 ]! K: }, J k
ALTER PROC 存储过程名
1 }2 K/ x2 [$ e. W$ H5 C[{@参数名 数据类型}[=default][OUTPUT]][,…n]
4 C4 ~ P0 N& G# S. H$ l" p6 eAS
1 N6 s# `& ]2 K- F; A1 H% j1 PSQL语句[…n]# m$ H* m7 C, d7 Z
修改与定义的语句基本一致,只将CREARE PROC 改成ALTER PROC;( K# a n/ l0 ]; d
2、修改用户自定义函数:6 B0 r: H( S: }
修改与定义的语句基本一致,只将CREARE FUNCTION 改成ALTER FUNCTION;4 U" d* d; i5 ~8 j6 w* Y
3、修改触发器:
Z) l2 }2 S8 p5 x修改与定义的语句基本一致,只将CREARE TRIGGER 改成ALTER TRIGGER;& S9 r. I. l* A) U# q& t, d! x
13.4.3 删除对象
# `( @5 b0 k# b& Z6 j" O1、 删除存储过程:
3 ]4 M5 D+ S0 KDROP PROCEDURE {存储过程名}[,…n];
# ~8 i* I& Z0 j' I8 N1 K7 t/ E# Z2、删除用户自定义函数5 I/ s0 Q2 ?: ~1 t- F6 E
DROP FUNCTION {[拥有者名。]函数名}[,…n]
' B9 N! w6 r6 g, d3、删除触发器5 c; [ U! @* m7 u/ N
DROP TRIGGER {触发器名}[,…n] |