打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL Server触发器的写法

触发器的概念很容易理解,可以简单地看成 事件-条件-动作规则。即特定的事件发生并满足条件,就执行动作,否则啥也不干。

但是触发器的写法不同的书却有很大区别,并且有些在SQL server 2008 R2上并不能执行,这里记录一种

insert / update / delete 触发器。

创建一个商品表GOODS,eg:

  1. CREATE TABLE GOODS(
  2. Gno char(4) PRIMARY KEY,
  3. Gname char(10),
  4. Price int);

1. INSERT触发器

为表GOODS建立一个INSERT触发器,当插入商品的价格高于9999时,拒绝插入(回滚,撤销插入事务)

向目标表中插入数据时,会触发该表的Insert 触发器,系统自动在内存中创建inserted表,存放要(已 ,取决于after/before)插入的数据。

  1. CREATE TRIGGER TRI_INSERT ON GOODS
  2. AFTER INSERT
  3. AS
  4. BEGIN
  5. Declare @pri int;
  6. Select @pri=Price From inserted
  7. IF(@pri > 9999)
  8. Begin
  9. print('太贵了,价格应小于9999')
  10. rollback
  11. END
  12. END

测试触发器:

  1. INSERT INTO GOODS
  2. VALUES('1','大白菜','3')

成功执行;

  1. INSERT INTO GOODS
  2. VALUES('2','菲力牛排','19999')

拒绝插入(插入事务被撤销)

2. Update触发器

在目标表中更新数据时,会触发该表的Update 触发器,系统自动在内存中创建deleted表和inserted表,deleted表存放的是更新前的数据,inserted表存放的是更新后的数据。

  1. CREATE TRIGGER TRI_UPDATE ON GOODS
  2. AFTER UPDATE
  3. AS
  4. BEGIN
  5. Declare @pri int;
  6. Select @pri=Price From inserted
  7. IF(@pri > 9999)
  8. Begin
  9. print('太贵了,价格应小于9999')
  10. rollback
  11. END
  12. ELSE
  13. Begin
  14. Select *
  15. From deleted
  16. Select *
  17. From inserted
  18. END
  19. END

测试:

  1. UPDATE GOODS
  2. SET Price = 6
  3. WHERE Gname = '大白菜'

3. Delete触发器

从目标表中删除数据时,会触发该表的Delete 触发器,系统自动在内存中创建deleted表,存放删除的数据。

  1. Create TRIGGER TRI_DELETE ON GOODS
  2. AFTER DELETE
  3. AS
  4. BEGIN
  5. print('删了就删了吧~')
  6. END

4. 混合触发器

以逗号隔开

  1. CREATE TRIGGER TRI_UPDATE ON GOODS
  2. AFTER UPDATE,INSERT

顺便留下while的用法:

  1. declare @i int
  2. set @i=1
  3. while @i<50
  4. begin
  5. insert into test (Cno,Cname) values(@i,'DcM')
  6. set @i=@i+1
  7. end
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL菜鸟入门级教程之触发器
触发器(Trigger)(四)
【MySQL】触发器入门
sql server触发器的例子
mysql5.0触发器的使用介绍
触发器怎么写
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服