MS SQL TRIGGER

Sql-Server 主要提供了两种机制来强制业务规则和数据完整性:约束constrain 和 触发器 trigger ..
触发器在制定的表中发生变化时被调用以响应insert,update,delete事件。
trigger可以查询其他表,包含复杂的T-sql语句,并支持回滚.

每个触发器都会创建两个逻辑专用表inserted 和 deleted表,表结构与被触发作用的表结构相同 执行完毕后 与触发器相关的两个表都会被删除。
当执行insert语句时,inserted表存放要向表中插入的所有行
当执行delete语句时,deleted表存放要向表中删除的所有行
当执行update语句时,相当于执行一个delete操作,再执行一个insert操作,旧的行先被移动到deleted表,然后再在新值插入到inserted表和目标表。


一般的创建trigger : (for / after 语句 触发)

MS SQL TRIGGER use   DB_name
MS SQL TRIGGER
go
MS SQL TRIGGER
--
MS SQL TRIGGER
create   trigger  trigger_name
MS SQL TRIGGER
on  table_Name    //   On  关键字
MS SQL TRIGGER
[ with Encryption ]   // 加密
MS SQL TRIGGER
for   [ / after ]  { [ insert [, ] /   update   [ , ]   / delete ]}  -- 指定触发器只有在触发SQL语句中制定的所有操作都已经成功执行后才激发。(包括所有的级联和约束都检查成功后才能激发)
MS SQL TRIGGER
AS
MS SQL TRIGGER
[ SQL-statements ]
MS SQL TRIGGER
MS SQL TRIGGER
go  
MS SQL TRIGGER
MS SQL TRIGGER

利用触发器instead of 语句代替其他语句操作 (就不执行instead of 后面指定的SQL指令而执行Trigger体 [sql-statements])

MS SQL TRIGGER use   Db_Name
MS SQL TRIGGER
go
MS SQL TRIGGER
create   trigger  Trigger_Name
MS SQL TRIGGER
on  Table_name
MS SQL TRIGGER
instead  of   [ insert, update,delete ]
MS SQL TRIGGER
as  
MS SQL TRIGGER
[ sql_statements ]
MS SQL TRIGGER
go

例如在系统查询分析器执行 update t1 set column_1='aaa' where id=123 可以看到t1下123号的column_1值没有预期改变 而是按照Trigger中 [sql-statements]中的格式走了

如何利用inserted 和 deleted表:
例: 创建一个触发器 要求当插入 删除 更新 T1表数据时 能更新 T2表中相应的C2字段值 (C2是统筹t1的字段)

MS SQL TRIGGER use   DB_Name
MS SQL TRIGGER
go
MS SQL TRIGGER
create   trigger  T_name
MS SQL TRIGGER
on  T1
MS SQL TRIGGER
for   update , insert , delete
MS SQL TRIGGER
as  
MS SQL TRIGGER
update  T2  set  C2 = C2 + 1   where  id = ( select  id  from   inserted)
MS SQL TRIGGER
update  T2  set  C2 = C2 - 1   where  id = ( select  id  from   deleted)
MS SQL TRIGGER
go
MS SQL TRIGGER
//

if update(column)语句 
MS SQL TRIGGER use   DB_Name
MS SQL TRIGGER
go
MS SQL TRIGGER
Alter   Trigger  Test1
MS SQL TRIGGER
on  T1
MS SQL TRIGGER
for   update
MS SQL TRIGGER
as
MS SQL TRIGGER
if   update (PWD)  print   ' password has changed.. '
MS SQL TRIGGER
go
MS SQL TRIGGER


用来检测修改该字段的操作

ps:允许多个事件insert delete update创建多个触发器 ,且相互不影响



-----
系统操作

改名trigger :    sp_remane Old_Trigger_name,NewTrigger_Name

禁用: Alter Table T1 DISABLE trigger Trigger_Name

查询: select * from sysObjects where Type='TR'

 

 

 


 

FROM : http://www.cnblogs.com/szroyman/archive/2006/01/15/317491.html

DEMO:http://www.cnblogs.com/bgming/archive/2005/10/10/251419.html

 

SEARCH FROM CNBLOGS KEY:SQL TRIGGER

你可能感兴趣的:(trigger)