- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库系统开发实验报告
实验二:触发器的创建与测试
内容
检查订单明细表Sales.SalesOrderDetail中的信息,如果修改记录中的产品单价UnitPrice大于产品公开报价(Production.Product.ListPrice),则不能进行修改并抛出错误信息,否则,进行修改并将修改的有关信息写到Production.ProuctUpdateLog表中。
要求
使用RAISEERROR抛出错误信息。
修改信息记录表Production.ProductUpdateLog的内容:记录编号、订单编号、订单明细编号、产品编号、产品的公开报价、修改前产品的单价、修改后产品的单价、修改者的登录名。使用存储过程完成该功能,并在存储过程中调用该存储过程。
给出触发器和存储过程的源代码和简要的说明(可以在代码中使用注释进行说明)。
设计触发器测试方案并给出测试的命令和结果,必要时可对测试结果进行分析。
实验内容:
首先,用Windows系统下的登录,附加数据库AdventureWorks
按照实验内容,我们先来查询一下AdventureWorks中的订单明细表Sales.SalesOrderDetail。
语句:
USE AdventureWorks
GO
SELECT * FROM Sales.SalesOrderDetail
GO
查询结果如下:
根据实验内容,创建名为Production.ProuctUpdateLog(产品更新日志)的表。其属性分别为记录编号,订单编号,订单明细编号,产品编号,产品公开报价,修改前产品的单价,修改后产品单价,修改者登录名。
语句:
/*记录编号,订单编号,订单明细编号,产品编号,产品公开报价,修改前产品的单价
,修改后产品单价,修改者登录名*/
USE AdventureWorks
GO
CREATE TABLE Production.ProductUpdateLog
(
记录编号 int IDENTITY primary key,
订单编号 int not null,
订单明细编号 int not null,
产品编号 int not null,
产品公开报价 money,
修改前产品单价 money,
修改后产品单价 money,
修改者登录名 nvarchar(50) not null
)
GO
运行结果如下:
将修改者登录名设为不准为空,同时用IDENTITY关键字设主键“记录编号”为自动增长。
表格Production.ProductUpdateLog创建成功,之后查询以检验其创建成功。
题目要求,当更新产品价格满足不大于公开报价条件时,更新表格Sales.SalesOrderDetail,并且向表Production.ProductUpdateLog中插入一条记录。要求此功能用存储过程实现。
下面创建一个名为Production.Record_Update的存储过程,以完成向表Production.ProductUpdateLog中插入记录的功能。
语句:
USE AdventureWorks
GO
IF OBJECT_ID(Production.Record_Update_Price,P)IS NOT NULL
DROP PROCEDURE Production.Record_Update_Price
GO
--如果数据库中存在名称为Production.Record_Update_Price的存储过程
--则删除该存储过程
--创建存储过程Production.Record_Update_Price,它有个参数,
--其中@SalesorderID 表示订单编号,@SalesorderdetailID 表示订单明细编号
--@ProductID 表示产品编号,@PublicPrice 表示公开报价
--@PrePrice 表示修改前价格,@PostPrice 表示修改后报价
--@Operator 表示修改者登录名
CREATE PROCEDURE Production.Record_Update_Price
--@RecordID int,
--因为表格ProductUpdateLog的主键设为IDENTITY性质,不用传参
@SalesorderID int,
@SalesorderdetailID int, @ProductID int,
@PublicPrice money, @PrePrice money,
@PostPrice money, @Operator nvarchar(50)
AS
--向表ProductUpdateLog插入一条记录,参数纷纷对应
INSERT INTO Production.Produc
原创力文档


文档评论(0)