在SQL Server 2008中,设某数据库中有商品表(商品号,商品名,进货价格),商品号为主码;销售表(商品号,销售时间,销售数量,销售价格,本次利润),商品号和销售时间为主码,销售价格为本次销售商品的单价。现要求每当在销售表中插入前4列数据时(假设一

admin2019-07-07  9

问题 在SQL Server 2008中,设某数据库中有商品表(商品号,商品名,进货价格),商品号为主码;销售表(商品号,销售时间,销售数量,销售价格,本次利润),商品号和销售时间为主码,销售价格为本次销售商品的单价。现要求每当在销售表中插入前4列数据时(假设一次只插入一行数据),系统自动计算本次销售产生的利润,并将该利润赋给销售表的第5列“本次利润”。请编写实现上述功能的后触发型触发器代码。

选项

答案CREATE TRIGGER calcu_product ON 销售表 FOR INSERT AS DECLARE @ 进价 money,@ 销量 int,@ 售价 money,@利润 money SELECT @进价= 进货价格 FROM 商品表 SELECT @销量=销售数量,@售价 = 销售价格 FROM inserted SET @利润 = @销量*(@售价-@进价) UPDATE 销售表 SET 本次利润 = @利润 WHERE 商品号 IN (SELECT 商品号 FROM inserted) AND 销售时间 IN (SELECT 销售时间 FROM inserted) END

解析 触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。触发器类似于约束,但比约束更加灵活,可以实施比FOREIGN KEY约束、CHECK约束更为复杂的检查和操作,具有更精细和强大的数据控制能力。
触发器的创建格式:
CREATE TRIGGER [schema_name.]trigger_name
ON{table | view}
{FOR | AFTER |INSTEAD OF}
{[INSERT][,][UPDATE][,][DELETE]}
AS{Sql_statement}
[;]
对应于本题中,触发事件为在销售表中插入前四列,条件为无条件执行,触发体动作为计算本次利润并插入表中。
转载请注明原文地址:https://kaotiyun.com/show/bxlZ777K
0

随机试题
最新回复(0)