SQL Server2012 学习之(十六) :触发器的创建与使用

接上篇博客的内容,触发器可以看作是一个特殊的存储过程。本篇博客主要关注DML和DDL触发器对应的使用方法。

1.触发器的定义
触发器的定义如下图。它与存储过程的区别在于触发器是 被动调用的 ,即在满足特定事件的情况下被执行,而存储过程是在使用操作语句时 主动进行调用。



触发器大致分为两种:DDL触发器和DML触发器,相对应的具体定义如下。



2.创建触发器

2.1创建INSERT触发器
INSERT触发器是DML触发器的一种,其语法格式如下。



以AdventureWorks2012中的Sales.Currency表为例,新建一个INSERT触发器。新建查询中输入
create trigger T_addCurrencyNum   
on Sales.Currency    --在Sales.Currency表中新建触发器
for insert    --规定触发器种类为INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1    --在Currency表修改后,与该表相关的CurrencyRate表中ModifiedDate值加一

即可新建一个INSERT触发器
之后对该表进行数据添加。添加与删除SQL数据可参考   插入与修改SQL数据
在新建查询中输入
create trigger T_addCurrencyNum   
on Sales.Currency    --在Sales.Currency表中新建触发器
for insert    --规定触发器种类为INSERT
as
update Sales.CurrencyRate set ModifiedDate=ModifiedDate+1    --在Currency表修改后,与该表相关的CurrencyRate表中ModifiedDate值加一

即可

2.2DELETE触发器
同理,在对数据表进行删除数据时,可以使用DELETE触发器,在删除数据后可以进行提示。
仍以AdventureWorks2012中的Sales.Currency表为例,新建一个DELETE触发器。新建查询中输入
create trigger T_deleteName
on Sales.Currency
for delete
as
select Name from deleted    --deleted是一个临时表,用以存储删除的数据

即可新建一个DELETE触发器,之后再进行数据的删除即可进行消息提示,新建查询中输入
delete from Sales.Currency where Name='CN'    --提示删除‘CN’

即可

2.3 UPDATE触发器
UPDATE可以看作是INSERT触发器与DELETE触发器的结合,在使用UPDATE时先进行DELETE,再进行INSERT
在新建查询中输入
create trigger T_updateCode
on Sales.Currency
for update
as
if(update(CurrencyCode))    --如果对表CurrencyCode进行修改
begin
       print 'you can not modify the CurrencyCode!'
       rollback transaction    --回滚操作,即对执行失败的语句进行撤销,返回原表
end
else
       print 'success!'

即可创建UPDATE触发器
此时将无法修改CurrencyCode列,在新建查询中输入
update Sales.Currency set CurrencyCode='SYJ' where Name='Kroon'

将会报错,如下图所示



3. DLL触发器
上述的DML触发器是针对具体语句的触发器,而DLL触发器则是针对 数据表级别的创建和修改设立的触发器种类,其语法格式如下。



新建查询中输入
create trigger T_modTable
on database    --数据表级别
for drop_table,alter_table    --不允许drop,alter
as
       print 'you can not modify the database!'
       rollback

即可创建一个DLL触发器,之后对AdventureWorks2012中的表进行删除时将会报错。

嵌套触发器和递归触发器在视频中未作过多讲解,之后的项目设计中若有涉及,将会进行更新!
  • 25
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值