首页 实训项目12 触发器的应用

实训项目12 触发器的应用

举报
开通vip

实训项目12 触发器的应用实验6 存储过程与触发器的应用 实训项目12 触发器的应用 一、实训目的 1、​ 掌握创建触发器的方法和步骤。 2、​ 掌握触发器的使用方法。 3、​ 掌握关系图的创建方法及作用。 二、实训准备 1、​ 了解触发器的基本概念和类型。 2、​ 了解创建触发器的SQL语句的基本语法。 3、​ 了解查看、修改和删除触发器的SQL命令的用法。 三、实训内容 虚拟测试环境:为某公司的产品管理创建数据库,该数据库中包含供生产部及销售部调度的产品库存表及产品销售表,要求库存产品与销产品间数据要同步。 1、正确创建数据库 2、...

实训项目12 触发器的应用
实验6 存储过程与触发器的应用 实训项目12 触发器的应用 一、实训目的 1、​ 掌握创建触发器的方法和步骤。 2、​ 掌握触发器的使用方法。 3、​ 掌握关系图的创建方法及作用。 二、实训准备 1、​ 了解触发器的基本概念和类型。 2、​ 了解创建触发器的SQL语句的基本语法。 3、​ 了解查看、修改和删除触发器的SQL命令的用法。 三、实训内容 虚拟测试环境:为某公司的产品管理创建数据库,该数据库中包含供生产部及销售部调度的产品库存表及产品销售表,要求库存产品与销产品间数据要同步。 1、正确创建数据库 2、正确创建产品库存表及产品销售表 IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND NAME = '库存表') DROP TABLE 库存表 GO --业务 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf :库存金额 = 库存数量 * 库存单价,通过触发器正确实现。 CREATE TABLE 库存表 ( 产品型号 VARCHAR(10) PRIMARY KEY NOT NULL, 产品名称 VARCHAR(40) NOT NULL, 库存数量 INT NULL, 库存单价 MONEY NULL, 库存金额 MONEY NULL ) GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND NAME = '销售表') DROP TABLE 销售表 GO --业务规则:销售金额 = 销售数量 * 销售单价,通过触发器正确实现。 CREATE TABLE 销售表 ( 产品型号 VARCHAR(10) NOT NULL, 购货商 VARCHAR(40) NULL, 销售数量 INT NULL, 销售单价 MONEY NULL, 销售金额 MONEY NULL, 销售日期 DATETIME ) GO 3、创建触发器 (1)创建为库存表创建插入触发器[T_INSERT_库存表]。 ①说明: 每当[库存表]发生 INSERT 动作,则引发该触发器。 ②触发器功能: 强制执行业务规则,保证插入的数据中库存金额 = 库存数量 * 库存单价。 ③重要提示: [INSERTED]、[DELETED]为系统临时表,不可创建、修改、删除,但可以调用。这两个系统表的结构同插入数据的表的结构。 ④参考代码: IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'TR' AND NAME = 'T_INSERT_库存表') DROP TRIGGER T_INSERT_库存表 GO CREATE TRIGGER T_INSERT_库存表 ON 库存表 AFTER INSERT AS --强制执行下列语句,保证业务规则 UPDATE 库存表 SET 库存金额 = 库存数量 * 库存单价 WHERE 产品型号 IN (SELECT 产品型号 from INSERTED) GO ⑤针对[库存表],插入测试数据: 注意,第一条数据中的数据符合业务规则, 第二条数据中,[库存金额]空,不符合业务规则, 第三条数据 [库存金额]不等于[库存数量]乘以[库存单价],不符合业务规则。 第四条数据库存数量为0。 请注意在插入数据后,检查[库存表]中的数据是否符合库存金额 = 库存数量 * 库存单价。 INSERT INTO 库存表(产品型号,产品名称,库存数量,库存单价,库存金额) SELECT 'N97','诺基亚N97',20,4000,80000 UNION ALL SELECT 'N85', '诺基亚N85',10,3000,NULL UNION ALL SELECT 'MT7', '摩托罗拉MT7',5,9000,500 UNION ALL SELECT 'N95','诺基亚N95',0,null,null GO --查询数据 SELECT * FROM 库存表 GO ⑥上述插入语句也可用四条INSERT……VALUES……实现。 (2)创建触发器[T_INSERT_销售表],该触发器较复杂。 ①说明: 每当[库存表]发生 INSERT 动作,则引发该触发器。 ②触发器功能: 实现业务规则。 ③业务规则: 如果销售的产品不存在或者库存为零或者库存不足,则终止销售操作并返回相应提示。 否则则自动减少[库存表]中对应库产品的库存数量和库存金额。 ④下面给出部分代码提示,请大家补充完成该触发器。 IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'TR' AND NAME ='T_INSERT_销售表') DROP TRIGGER T_INSERT_销售表 GO CREATE TRIGGER T_INSERT_销售表 ON 销售表 AFTER INSERT AS --检查数据的合法性: --1、如果销售的产品不存在,返回提示,撤消销售操作 IF NOT EXISTS ( SELECT * FROM 库存表 WHERE 产品型号 IN (SELECT 产品型号 FROM INSERTED) ) BEGIN --返回错误提示 RAISERROR('该型号的产品不存在,不能销售,请重新输入。',16,1) --回滚事务 ROLLBACK RETURN END --2、销售的产品存在,但库存为0,返回提示,撤消销售操作,代码与1类似 --3、销售的产品存在,但库存数量比销售数量少,返回提示,撤消销售操作 --提示:可如下所示先定义一个变量存放销售数量,其他代码与1类似 --DECLARE @xssl MONEY --SET @xssl = (SELECT 销售数量 FROM INSERTED) --对合法的数据进行处理 : --1、更新销售表中的相应产品的销售金额 UPDATE 销售表 SET 销售金额 = 销售数量 * 销售单价 WHERE 产品型号 IN (SELECT 产品型号 FROM INSERTED) --2、更新库存表中的相应产品的为库存数量及库存金额 /*提示:可先定义两个变量,分别存放销售表中销售产品的型号及数量,而销售数据 已在前面定义过,故不能再重复定义,此处只需定义存放销售型号的变量既可*/ ⑤请大家自行跟踪[库存表]和[销售表]的数据变化。 --针对[销售表],插入第一条测试数据,该数据是正常的。 --针对[销售表],插入第二条测试数据,该数据 销售金额 不等于 销售单价 * 销售数量(正确结论应该是;触发器将自动更正数据,使 销售金额 等于 销售单价 * 销售数量)。 I--针对[销售表],插入第三条测试数据,该数据中的产品在库存表中找不到对应(触发器应正确给出提示)。 --针对[销售表],插入第四条测试数据,该数据中的产品在库存表中库存为0(触发器应正确给出提示)。 --针对[销售表],插入第五条测试数据,该数据中的产品销售数量大于库存表中的库存数量(触发器应正确给出提示)。 --查询数据 SELECT * FROM库存表 SELECT * FROM销售表 GO 4、补充: (1)本示例主要通过一个简单的业务规则实现来进行触发器使用的说明,具体的要根据需要灵活处理; (2)关于触发器要理解并运用好 INSERTED ,DELETED 两个系统表; 5、请参阅销售表的插入触发器,编写销售表的更新触发器。
本文档为【实训项目12 触发器的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_261441
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:4
分类:互联网
上传时间:2010-11-08
浏览量:19