SQL Server触发器的写法

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

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

 

创建一个商品表GOODS,eg:

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

1. INSERT触发器

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

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

CREATE TRIGGER TRI_INSERT ON GOODS
AFTER INSERT
AS 
BEGIN
	Declare @pri int;
	Select @pri=Price  From inserted
	IF(@pri > 9999)
		Begin
		    print('太贵了,价格应小于9999')
			rollback 
		END
END

测试触发器:

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

成功执行;

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

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

2. Update触发器

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

CREATE TRIGGER TRI_UPDATE ON GOODS
	AFTER UPDATE
AS
BEGIN
	Declare @pri int;
	Select @pri=Price  From inserted
	IF(@pri > 9999)
		Begin
		    print('太贵了,价格应小于9999')
			rollback 
		END
	ELSE
		Begin
			Select *
			From deleted
			Select * 
			From inserted
		END
END

测试:

UPDATE GOODS
SET Price = 6
WHERE Gname = '大白菜'

3. Delete触发器

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

Create TRIGGER TRI_DELETE ON GOODS
   AFTER DELETE
AS 
BEGIN
    print('删了就删了吧~')
END

4. 混合触发器

以逗号隔开

CREATE TRIGGER TRI_UPDATE ON GOODS
	AFTER UPDATE,INSERT

 

 

顺便留下while的用法:

declare @i int
set @i=1

while @i<50
begin
	insert into test (Cno,Cname) values(@i,'DcM')
	set @i=@i+1
end

 

  • 21
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值