关于 INSTEAD OF 触发器

本文介绍了如何使用SQL的INSTEAD OF触发器来防止超出限制的操作,例如在借书系统中限制每人最多借五本书,以及在用户有未归还书籍时阻止删除用户。通过示例代码详细展示了INSERT和DELETE操作的触发器实现。
摘要由CSDN通过智能技术生成

快生三星了,好歹也得在CSDN上留点什么以示水平不低吧,但总是不知道该写什么,只善于回答问题,不善于总结问题。

近来在坛子上经常看到有问触发器的,而且大多是要求实现在一定条件下不向表中进行操作的触发器,可大多数都不知道该用 INSTEAD OF 触发器。

 

实现在一定条件下不向表中进行操作的触发器也可以用 AFTER | FOR 触发器,方法是对系统临时表 inserted 表或者 deleted 表进行检查,发现不能操作的,便用 ROLLBACK 对表进行回滚。但是这种操作是有点问题的,一是如果同时进行其他操作的话,可能会被一起回滚,二是有点脱什么放什么的嫌疑,先干了,发现不行,再回退,是不是很好笑!

 

其实 INSTEAD OF 触发器是解决这类问题的最好办法。在对表进行操作时,总会产生 INSERTED 和(或)DELETED表,不管这个操作是否已经进行。这里的和/或,要看进行的什么操作,插入,产生 INSERTED 表,删除,产生DELETED表,而update则两个都会产生。

 

行了,实际的编程思想是这样的。。。

如果不满足条件就不能插入,好,用 INSTEAD OF 触发器,利用 INSERTED 表先检查是否满足条件,如满足条件,那就只要: insert into 目标表 select * from inserted 就OK了,否则,可以什么都不做,由插入程序去根据 @@ROWCOUNT判断插入是否成功。当然,也可以用select '提示' 的方法给出提示。</

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值