[SQL2005触发器学习]-3、Instead Of触发器

1、Instead Of触发器的工作原理
    Instead Of触发器与After触发器的工作流程是不一样。After触发器是在SQLSERVER服务器接到执行SQL语句请求之后,先建立Inserted和Updated临时表,然后在更改物理表上的数据,最后才激活触发器程序。而Instead Of触发器在SQLSERVER服务器接到执行SQL语句请求,建立Inserted和Updated临时表后就激活了Instead Of触发器程序,至于SQL语句的请求如何操作数据就不在管了,把执行权全权叫给了Instead Of触发器。
2、Instead Of触发器使用范围
    ♣ 数据表里的数据禁止修改 
    ♣ 有可能要回滚修改的SQL语句,有些判断需要在执行之前进行,所以After触发器并不是最好的选择,Instead Of触发器更合适。
    ♣ 在试图中使用触发器, After触发器不能在视图中使用。
    ♣ 用自己 的方式去修改数据。可以用Instead Of 触发器来控制数据的修改方式和流程。
3、注意事项
    ☞ Instead Of触发器和After触发器均不能建立在临时表上。
    ☞ 在同一个数据表中,对每个操作(Insert,Update,Delete)只能建立一个Instead Of触发器。
    ☞ writetext语句不能触发Insert和update类型的触发器。
    ☞ Truncate Table 语句类似于Deleteuju,但是它不激活触发器。
4、Instead Of触发器实例    

 
  
Create Trigger OrderDetail_Insert
ON OrderDetail
Instead
Of Insert
AS
Begin
Set Nocount On ; /* 屏蔽触发器里Insert语句执行完后返回的所影响的行数的消息 */
Declare @Orderid int , @Price money , @discount real
select @OrderId = OrderId, @Price = Price, @Discount = Discount from Inserted
if ( @Discount ) > 0.6
begin
print ' 折扣不能大于0.6 '
end
else
begin
insert into OrderDetail(OrderId,Price,Discount) values ( @OrderId , @Price , @discount )
end
End
 

转载于:https://www.cnblogs.com/heimirror/archive/2011/03/30/2000014.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值