SQL SERVER 触发器 trigger

原文地址:

http://hi.baidu.com/%D3%E3%D4%DA%CC%EC%C9%CF%B7%C9soft/blog/item/4ba0443676493a350a55a984.html

sql server 触发器 trigger

sql server 主要提供两种机制来强制业务规则和数据完整性 :约束 constrain 和 触发器rigger
触发器在定制的表中发生变化时被调用一响应update insert delete 事件
trigger 可以查询其它表,包含复杂的sql语句 并支持回滚。
每个触发器都会创建连个逻辑表 inserted 和deleted 表结构与被触发的表结构相同
当执行delete语句时,deleted表存放要向表中删除的所有行
当执行update语句时,相当于执行一个delete操作,再执行一个insert操作,旧的行先被移动到deleted表,
然后再在新值插入到inserted表和目标表。

一般的trigger:(for after语句触发)
use db_name
go
creat trigger trigger_name
on table_name// 定制的表
[with encryption]//加密
for [/after]{update、insert、delete}//指定触发器只有在触发sql语句中制定的操作都已经成功执行了才激发

as sqlstatements //触发自动执行的sql文
go
利用触发器instead of 语句代替其他语句操作 (就不执行instead of 后面指定的SQL指令而执行Trigger体 [SQL-statements])
use Db_Name
go
create trigger Trigger_Name
on Table_name
instead of [insert,update,delete]
as
[SQL_statements]
go
例如在系统查询分析器执行 update t1 set column_1='aaa' where id=123
可以看到t1下123号的column_1值没有预期改变 而是按照Trigger中 [SQL-statements]中的格式走了

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

use DB_Name
go
create trigger T_name
on T1
for update,insert,delete
as
update T2 set C2=C2+1 where id=(select id from inserted)
update T2 set C2=C2-1 where id=(select id from deleted)
go
//
if update(column)语句
use DB_Name
go
Alter Trigger Test1
on T1
for update
as
if update(PWD) print 'password has changed..'
go

改名trigger : sp_remane Old_Trigger_name,NewTrigger_Name
禁用:         Alter Table T1 DISABLE trigger Trigger_Name
查询:         select * from sysObjects where Type='TR'
删除           drop trigger trigger_name

http://www.blog.edu.cn/user2/yiyun/archives/2007/1638240.shtml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值