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

猜你喜欢

转载自blog.csdn.net/weixin_42765557/article/details/114596510