柯侧耳倾听者 - 云代码空间
—— 翱翔在Java世界的海洋之上
触发器
实验目的: 掌握触发器的基本概念; 掌握创建触发器的方法; 掌握管理和维护触发器的方法。
一、 实验内容:
创建并验证下列触发器:
1、 在销售表上创建AFTER触发的INSERT触发器,当用户插入一条新销售记录时,如果销售数量大于产品信息表上的库存量,则不能实现插入操作,并给出提示信息;
CREATE TRIGGER 销售trig_insert1 ON 销售
FOR INSERT
AS
BEGIN
DECLARE @Quantity float, @Stock int, @ProductNum char(6)
SELECT @ProductNum=产品编号, @Quantity=数量 FROM INSERTED
SELECT @Stock=库存量 FROM 产品信息 WHERE 产品编号=@ProductNum
IF @Quantity>@Stock --销售数量大于库存量不执行当前操作
BEGIN
RAISERROR('销售数量超出库存,不能销售!',7,1)
ROLLBACK TRANSACTION
END
END
INSERT
INTO 销售
VALUES('000009','100009','2008-06-21',9,9000)
当在触发器中改成:
INSERT
INTO 销售
VALUES('000001','100001','2008-06-21',50,9000)
2、 将上题的触发器改为INSTEAD OF触发器;
CREATE TRIGGER 销售trig_insert2 ON 销售
INSTEAD OF INSERT
AS
BEGIN
DECLARE @Quantity float, @Stock int, @ProductNum char(6)
SELECT @ProductNum=产品编号, @Quantity=数量 FROM INSERTED
SELECT @Stock=库存量 FROM 产品信息 WHERE 产品编号=@ProductNum
IF @Quantity>@Stock --销售数量大于库存量不执行当前操作
BEGIN
RAISERROR('销售数量超出库存,不能销售!',7,1)
ROLLBACK TRANSACTION
END
ELSE
INSERT INTO 销售 SELECT * FROM INSERTED
END
INSERT
INTO 销售
VALUES('000001','100001','2017-11-24',50,5000);
INSERT
INTO 销售
VALUES('000002','100001','2017-11-24',5,7000);
3、 在销售表上创建AFTER触发的INSERT触发器,当用户插入一条新销售记录时,如果销售数量大于产品信息表上的库存量,则不能实现插入操作,并给出提示信息;如果可以的话,要同时更新产品信息表,使其库存量减少相应的数量;
CREATE TRIGGER 销售trig_insert3 ON 销售
FOR INSERT
AS
BEGIN
DECLARE @Quantity float, @Stock int, @ProductNum char(6)
SELECT @ProductNum=产品编号, @Quantity=数量 FROM INSERTED
SELECT @Stock=库存量 FROM 产品信息 WHERE 产品编号=@ProductNum
IF @Quantity>@Stock --销售数量大于库存量不执行当前操作
BEGIN
RAISERROR('销售数量超出库存,不能销售!',7,1)
ROLLBACK TRANSACTION
END
ELSE
UPDATE 产品信息 SET 库存量=库存量-@Quantity WHERE 产品编号=@ProductNum
END
INSERT
INTO 销售
VALUES('000001','100001','2017-11-24',50,5000);
INSERT
INTO 销售
VALUES('000001','100001','2017-11-24',10,5000);
三、相关知识:创建触发器的语法格式:
CREATE TRIGGER trigger_name
ON { table | view } FOR|AFTER|INSTEAD OF
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
sql_statement
四、 实验方法及步骤(代码):
在sql server环境下用T-SQL完成。
五、 结论及体会:
通过实验掌握触发器的基本概念、创建触发器、管理和维护触发器的方法。