37205-00-SQL-Server-2005课后实训参考答案.doc_第1页
37205-00-SQL-Server-2005课后实训参考答案.doc_第2页
37205-00-SQL-Server-2005课后实训参考答案.doc_第3页
37205-00-SQL-Server-2005课后实训参考答案.doc_第4页
37205-00-SQL-Server-2005课后实训参考答案.doc_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课后实训参考答案单元1(SQL Server概述)1、使用SQL语句。在Sale数据库中创建名为MyDataType的用户定义数据类型,数据类型为NVARCHAR,长度为20,该列允许为NULL。USE SaleGOEXEC sp_addtype MyDataType,NVARCHAR(20),NULLGO单元2(单表数据)使用查询窗口或sqlcmd实施查询。本实训使用Xk数据库。-1查看系部编号为“03”的系部名称。 USE Xk GO SELECT DepartName FROM Department WHERE DepartNo=03 GO-2查看系部名称中包含有“工程”两个字的系的全名。 USE Xk GO SELECT DepartName FROM Department WHERE DepartName LIKE %工程% GO-3显示共有多少个系部。 USE XK GO SELECT 系部总数=COUNT(*) FROM Department GO-4显示“01”年级共有多少个班级。 USE XK GO SELECT 01 级班级数=COUNT(*) FROM Class WHERE ClassNo LIKE 2001% GO SELECT 01 级班级数=COUNT(*) FROM Class WHERE ClassName LIKE 01% GO SELECT 01 级班级数=COUNT(*) FROM Student WHERE ClassNo LIKE 2001% GO-5查看在“周二晚”上课的课程名称和教师。USE XKGOSELECT 课程名称=CouName,任课教师=TeacherFROM Course WHERE SchoolTime=周二晚GO-6查看姓“张”、“陈”、“黄”同学的基本信息,要求按照姓名降序排序查询结果。USE XKGOSELECT *FROM StudentWHERE StuName LIKE 张% OR StuName LIKE 陈% OR StuName LIKE 黄%ORDER BY StuName DESCGO-方法USE XKGOSELECT *FROM StudentWHERE StuName like 张,陈,黄%ORDER BY StuName DESCGO单元2(多表查询)-1.按系部统计课程的平均报名人数,要求显示系部名称、平均报名人数。SELECT 系部名称=DepartName,平均报名人数=AVG(WillNum) FROM Course C,Department DWHERE C.DepartNo=D.DepartNoGROUP BY DepartNameGO-如果小数点后只保留位SELECT 系部名称=DepartName,平均报名数=CONVERT(DECIMAL(5,2),AVG(WillNum)FROM Course C,Department DWHERE C.DepartNo=D.DepartNoGROUP BY DepartNameGO-2.统计各个系部的班级数,要求显示系部编号、系部名称和班级数量。SELECT C.DepartNo,DepartName,COUNT(*)FROM Class C,Department DWHERE C.DepartNo=D.DepartNoGROUP BY C.DepartNo,DepartNameGO-3查看“甘蕾”同学选修的课程名、学分、上课时间、志愿号,按志愿号(升序)排序查询结果。SELECT CouName,Credit,SchoolTime,WillOrderFROM StuCou SC,Course C,Student SWHERE SC.CouNo=C.CouNo AND SC.StuNo=S.StuNo AND StuName=甘蕾ORDER BY WillOrderGO-4查看“00电子商务”班的选修报名情况。要求显示学号、姓名、课程编号、课程名称、志愿号,并按学号(升序)、志愿号排序(升序)。SELECT S.StuNo,StuName,C.CouNo,CouName,WillOrderFROM StuCou SC,Course C,Student S,Class CLWHERE SC.CouNo=C.CouNo AND SC.StuNo=S.StuNo AND CL.ClassNo=S.ClassNo AND ClassName Like 00电子商务ORDER BY S.StuNo,WillOrderGO-5按系部统计各系的最少报名人数、最多报名人数、平均报名人数和报名总数,并汇总显示所有系部的报名总数。要求平均报名人数保留两位小数位。 SELECT 系部名称=DepartName,最少报名人数=MIN(WillNum),最多报名人数=MAX(WillNum),平均报名人数=CONVERT(DECIMAL(5,2),AVG(WillNum),报名总数=SUM(WillNum) FROM Course C,Department DWHERE C.DepartNo=D.DepartNoGROUP BY DepartName WITH CUBEGO单元3(维护数据)-12学号为“00000025”的同学第一志愿报名选修“001”课程,请在数据库中进行处理。INSERT StuCou(StuNo,CouNo,WillOrder,State) VALUES(00000025,001,1,报名)GO/*课程报名人数增加人*/UPDATE CourseSET WillNum=WillNum+1WHERE CouNo=001GO-2删除学号为“00000025”的学生的选课报名信息。DELETE StuCouWHERE StuNo=00000025GO/*课程表00000025同学报名的那些课程报名人数都要减少1*/-方法:UPDATE CourseSET WillNum=WillNum-1FROM Course,StuCouWHERE StuNo=00000025 and Course.CouNo=StuCou.CouNoGO-方法2:(游标)DECLARE CouNo char(3)DECLARE MYCursor cursorfor SELECT CouNo from StuCou WHERE StuNo=00000025OPEN MYCursorFETCH NEXT FROM MYCursor INTO CouNoWHILE FETCH_STATUS=0 BEGIN UPDATE Course SET WillNum=WillNum-1 WHERE CouNo=CouNo FETCH NEXT FROM MYCursor INTO CouNo ENDCLOSE MYCursorDEALLOCATE MYCursorGO-3需要将“00多媒体”班级“杜晓静”同学的名字修改为“杜小静”。UPDATE StudentSET StuName=杜小静FROM Student S,Class CWHERE S.ClassNo=C.ClassNo AND StuName=杜晓静 AND ClassName=00多媒体GO-“00电子商务”班的“林斌”同学申请将已选修的“网络信息检索原理与技术”课程修改为“Linux操作系统”。UPDATE StuCouSET CouNo=(SELECT CouNo FROM Course WHERE CouName=Linux操作系统)FROM StuCou SC,Student S,Course C,Class ClWHERE SC.StuNo=S.StuNo AND SC.CouNo=C.CouNo AND S.ClassNo=Cl.ClassNo AND S.StuName=林斌 AND Cl.ClassName=00电子商务 AND CouName=网络信息检索原理与技术GO单元4(数据库设计) 某公司计划对产品的销售情况进行计算机管理。产品表具有产品编号、产品名称、单价、库存数量4个属性。客户表包括有客户编号、客户姓名、住址、联系电话4个属性。产品的入库表包括有入库日期、产品编号、产品名称、入库数量、单价属性。销售表包括有销售日期、产品编号、产品名称、客户编号、客户姓名、单价、销售数量。1绘出产品销售的E-R图。客户编号选课状态产品名称自愿号产品学 生客户表课 程 销售学生-课程mm库存数量选课密码单价班级产品名称产品编号学号联系电话系部名称住址产品编号课程名称nn客户编号客户姓名销售日期课程名称客户姓名课程名称单价课程名称销售数量课程名称库房学 生属性(略)选课密码入库学生-课程单价系部名称入库数量产品编号产品名称入库日期PmQm2、将产品销售的E-R图转换为关系数据模型。产品表:产品编号产品名称单价库存数量客户表:客户编号客户名称住址联系电话入库表:入库日期产品编号产品名称入库数量单价销售表:销售日期产品编号产品名称客户编号客户姓名单价销售数量3、将产品销售关系数据模型规范为范式。可参考“创建和管理表”实训题。4、请分析主键、外键、公共键。主键:产品表的产品编号,客户表的客户编号。外键:入库表的产品编号,销售表的产品编号、客户编号。5、举例说明如何保证产品销售数据的完整性。表数据完整性:给产品表、客户表创建主键。列数据的完整性:可以给指定的列创建约束(参见实施数据完整性实训题目)。参照完整性:给入库表、销售表创建外键。单元5(创建与管理数据库)写出实现如下功能的SQL语句。1创建名字为Sale的销售数据库。该数据库有一个名为Sale.mdf的主数据文件和名字为Sale_log.ldf的事务日志文件。主数据文件容量为4MB,日志文件容量为10MB,数据文件和日志文件的最大容量为20MB,文件增长量为1MB。CREATE DATABASE Sale ONPRIMARY (NAME=Sale, FILENAME=C:Sale.mdf, SIZE =4, MAXSIZE=10, FILEGROWTH=1)LOG ON ( NAME=Sale_log, FILENAME=D:Sale_log.ldf, SIZE=2, MAXSIZE= 10, FILEGROWTH=1) /*注意结尾处无逗号*/GO2在Sale数据库下新增名字为UserGroup的文件组。USE SaleGoALTER DATABASE SaleADD FILEGROUP UserGroupGo3以增加次数据文件的方式扩充Sale数据的容量。次数据文件容量为5MB,最大容量为10MB,文件增量为1MB。要求将次数据文件保存在与事务日志文件不同的存储设备上,次数据文件作为UserGroup文件组的成员。USE MASTERGOALTER DATABASE SaleADD FILE(NAME=Sale2, FILENAME=C:Sale2.ndf,SIZE=5MB,MAXSIZE=10MB,FILEGROWTH=1MB)TO FILEGROUP UserGroupGO4使用存储过程显示Sale数据库的信息。SP_helpdb SaleGO单元6(创建与管理数据表)1实训项目都是围绕Sale数据库展开,进销存系统通常包括客户资料、产品信息、进货记录、销售记录等。所以针对Sale数据库,设计表了表1-4,数据请见表5-8,并将在后续章节逐步完善。使用Transcact-SQL语句,在Sale数据库下创建客户表、产品表、入库表和销售表并输入数据。请将脚本保存为.sql文件。表1 Customer(客户表)结构列名数据类型及长度是否允许为空备注CusNonvarchar(3)NOT NULL客户编号CusNamenvarchar(10)NOT NULL客户姓名Addressnvarchar(20)NULL地址Telnvarchar(20)NULL联系电话表2 Product(产品表)结构列名数据类型及长度是否允许为空备注ProNonvarchar(5)NOT NULL产品编号ProNamenvarchar(20)NOT NULL产品名PriceDecimal(8,2)NOT NULL单价StocksDecimal(8,0)NOT NULL库存数量表3 ProIn(入库表)结构列名数据类型及长度是否允许为空备注InputDateDateTimeNOT NULL入库日期ProNonvarchar(5)NOT NULL产品编号QuantityDecimal(6,0)NOT NULL入库数量表4 ProOut(销售表)结构列名数据类型及长度是否允许为空备注SaleDateDateTimeNOT NULL销售日期CusNonvarchar(3)NOT NULL客户编号ProNonvarchar r(5)NOT NULL产品编号QuantityDecimal(6,0)NOT NULL销售数量表5 Customer(客户表)数据CusNoCusNameAddressTel001杨婷深圳0755-22221111002陈萍深圳0755-22223333003李东深圳0755-22225555004叶合广州020-22227777005谭新广6 Product(产品表)数据ProNoProNamePriceStocks00001电视3000.0080000002空调2000.0050000003床1000.0030000004餐桌1500.0020000005音响5000.0060000006沙发6000.00100表7 ProIn(入库表)数据InputDate(入库日期)DateTimenot nullProNo(产品编号)nvarchar(5)not nullQuantity(入库数量)Decimal(6,0)not null2006-1-100001102006-1-10000252006-1-20000152006-1-200003102006-1-300001102006-2-100003202006-2-200001102006-2-300004302006-3-30000320表8 ProOut(销售表)数据SaleDateCusNoProNoQuantity 2006-1-100100001102006-1-20010000252006-1-30020000152006-2-100200003102006-2-200100001102006-2-300100003202006-3-200300001102006-3-200300004302006-3-30020000320-该题创建表时同时创建主键、外键。先创建表,再创建主键、外键的方法参见照实训5_3Use Sale GoCREATE TABLE Customer (CusNo nvarchar(3) Primary key, CusName nvarchar(10)not null, Address nvarchar(20),Tel Char(20) Go/*创建产品表*/CREATE TABLE Product (ProNo nvarchar(5)Primary key, ProName nvarchar(20)not null, Price Decimal(8,2)not null, Stocks Decimal(8,0)not null)Go/*创建入库表*/CREATE TABLE ProIn (InputDate DateTime not null,ProNo nvarchar(5)References Product(ProNo),Quantity Decimal(6,0)not null)Go/*创建销售表*/CREATE TABLE ProOut (SaleDate DateTime not null,CusNo nvarchar(3)not null References Customer(CusNo),ProNo nvarchar(5)not null References Product(ProNo),Quantity Decimal(6,0)not null)Go-向Customer表输入数据-INSERT INTOCustomer VALUES(001,杨婷,深圳INSERT INTOCustomer VALUES(002,陈萍,深圳INSERT INTOCustomer VALUES(003,李东,深圳INSERT INTOCustomer VALUES(004,叶合,广州INSERT INTOCustomer VALUES(005,谭新,广州Go-向Product表中插入数据-INSERT INTOProduct VALUES(00001,电视,3000.00,800)INSERT INTOProduct VALUES(00002,空调,2000.00,500)INSERT INTOProduct VALUES(00003,床,1000.00,300)INSERT INTOProduct VALUES(00004,餐桌,1500.00,200)INSERT INTOProduct VALUES(00005,音响,5000.00,600)INSERT INTOProduct VALUES(00006,沙发,6000.00,100)Go-向ProIn表中插入数据-INSERT INTOProIn VALUES(2006-1-1,00001,10)INSERT INTOProIn VALUES(2006-1-1,00002,5)INSERT INTOProIn VALUES(2006-1-2,00001,5)INSERT INTOProIn VALUES(2006-1-2,00003,10)INSERT INTOProIn VALUES(2006-1-3,00001,10)INSERT INTOProIn VALUES(2006-2-1,00003,20)INSERT INTOProIn VALUES(2006-2-2,00001,10)INSERT INTOProIn VALUES(2006-2-3,00004,30)INSERT INTOProIn VALUES(2006-3-3,00003,20)Go-向ProOut表中插入数据-INSERT INTO ProOut VALUES(2006-1-1,001,00001,10)INSERT INTO ProOut VALUES(2006-1-2,001,00002,5)INSERT INTO ProOut VALUES(2006-1-3,002,00001,5)INSERT INTO ProOut VALUES(2006-2-1,002,00003,10)INSERT INTO ProOut VALUES(2006-2-2,001,00001,10)INSERT INTO ProOut VALUES(2006-2-3,001,00003,20)INSERT INTO ProOut VALUES(2006-3-2,003,00001,10)INSERT INTO ProOut VALUES(2006-3-2,003,00004,30)INSERT INTO ProOut VALUES(2006-3-3,002,00003,20)Go单元7(实施数据完整性)1根据你的理解,请在实训5_2的表1-4的备注栏中标出主键、外键。表1 Customer(客户表)结构列名数据类型及长度是否允许为空备注CusNonvarchar(3)NOT NULL客户编号 主键CusNamenvarchar(10)NOT NULL客户姓名Addressnvarchar(20)NULL地址Telnvarchar(20)NULL联系电话表2 Product(产品表)结构列名数据类型及长度是否允许为空备注ProNonvarchar(5)NOT NULL产品编号 主键ProNamenvarchar(20)NOT NULL产品名PriceDecimal(8,2)NOT NULL单价StocksDecimal(8,0)NOT NULL库存数量表3 ProIn(入库表)结构列名数据类型及长度是否允许为空备注InputDateDateTimeNOT NULL入库日期ProNoNvarchar(5)NOT NULL产品编号 外键QuantityDecimal(6,0)NOT NULL入库数量表4 ProOut(销售表)结构列名数据类型及长度是否允许为空备注SaleDateDateTimeNOT NULL销售日期CusNonvarchar(3)NOT NULL客户编号 外键ProNonvarchar r(5)NOT NULL产品编号 外键QuantityDecimal(6,0)NOT NULL销售数量-该题适用于创建表时没有创建主键、外键的情况/* Customer表的主键为CusNo*/ALTER TABLE CustomerADD CONSTRAINT PK_Customer PRIMARY KEY (CusNo)GO/* Product表的主键为ProNo*/ALTER TABLE ProductADD CONSTRAINT PK_Product PRIMARY KEY (ProNo)GO/*外键:ProOut 表的ProNo*/ALTER TABLE ProOutADD CONSTRAINT FK_ProOut_Product FOREIGN KEY (ProNo) REFERENCES Product (ProNo)/*外键:ProOut 表的CusNo*/ALTER TABLE ProOutADD CONSTRAINT FK_ProOut_Customer FOREIGN KEY (CusNo) REFERENCES Customer(CusNo)/*外键:ProIn 表的ProNo*/ALTER TABLE ProInADD CONSTRAINT FK_ProIn_Product FOREIGN KEY (ProNo) REFERENCES Product(ProNo)-3约束客户表Customer的CusNo列值长度为3;产品表Product的ProNo列值长度为5。ALTER TABLE CustomerADD CONSTRAINT CK_Customer_CusNo CHECK (LEN(CusNo)=3)GOALTER TABLE ProductADD CONSTRAINT CK_Product_ProNo CHECK (LEN(ProNo)=5)GO-测试:INSERT INTOProduct VALUES(000071,平板电脑,3000.00,800)GO-系统会自动截断为长度5位。-测试:INSERT INTOProduct VALUES(009,DVD,3000.00,800)GO4对产品表Product的Stocks列、Price列、入库表ProIn的Quantity列、销售表ProOut的Quantity列值进行约束,使其值必须大于0。ALTER TABLE ProductADD CONSTRAINT CK_Product_Stocks CHECK (Stocks0)GOALTER TABLE ProductADD CONSTRAINT CK_Product_Price CHECK (Price0)GOALTER TABLE ProInADD CONSTRAINT CK_ProIn_Quantity CHECK (Quantity0)GOALTER TABLE ProOutADD CONSTRAINT CK_ProOut_Quantity CHECK (Quantity0)GO5对销售表ProOut的SaleDate列进行约束,当不输入值时,系统默认其值为系统当前日期。CREATE DEFAULT CurrentDateAS GETDATE()GOEXEC sp_bindefault CurrentDate,ProOut.SaleDateGO单元8(提高查询速度)本单元实训使用Sale数据库。1用户按照CusName(客户姓名)查询客户信息,希望提高查询速度。USE SaleGOCREATE INDEX IX_CustomerON Customer (CusName)GO2用户按照ProName(产品名称)查询产品信息,希望提高查询速度。USE SaleGOCREATE INDEX IX_ProductON Product (ProName)GO3用户按照SaleDate(销售日期)查询销售信息,希望提高查询速度。USE SaleGOCREATE INDEX IX_ProOutON ProOut (SaleDate)GO单元9(Transcact-SQL语言编程基础)本单元实训使用Sale数据库。 1计算有多少种产品(假设为x),然后显示一条信息:共有x种产品。USE SaleGODECLARE x intSET x=(SELECT COUNT(*) FROM Product)PRINT 共有+convert(char(2),x) +种产品。GO2编写计算n!(n=20)的程序,并显示计算结果。DECLARE i int,PRODUCT FLOAT -定义整型变量i用来计数;Product为存放结果的单元SELECT i=1,PRODUCT=1 -给整型变量i和sum赋值WHILE i=20 -当i小于等于时,执行循环体BEGIN -定义语句块 SELECT PRODUCT=PRODUCT*i -求和 SELECT i=i+1 -计数单元加END -语句块定义结束PRINT 20!=+convert(char(11),PRODUCT) -显示结果GO3、创建一自定义函数,能够利用该函数计算出销售总金额(数量Quantity*单价Price)。CREATE FUNCTION GETProduct(Quantity decimal(6,0), Price decimal(8,2)RETURNS decimal(10,2)ASBEGIN RETURN (Quantity*Price)END-测试SELECT Price,Quantity,dbo.GETProduct(Price,Quantity) ProductQuFROM Product,ProOutWHERE Product.ProNo=ProOut.ProNoGO单元10(保证数据安全性_视图)本实训使用Sale数据库。1创建视图V_Sale1,显示销售日期、客户编号、客户姓名、产品编号、产品名称、单价、销售数量和销售金额。CREATE VIEW V_Sale1 ASSELECT SaleDate,CusName,ProName,Price,Quantity,SaleMoney=(Price*Quantity) FROM ProOut PO,Customer C,Product PWHERE P.ProNo=PO.ProNo AND C.CusNo=PO.CusNoGO2创建视图V_Sale2,统计每种产品的销售数量和销售金额。统计结果包括:产品编号、产品名称、单价、销售数量和销售金额。CREATE VIEW V_Sale2ASSELECT P.ProNo,P.ProName,SaleQuantity=SUM(Quantity),SaleMoney=SUM(Price*Quantity) FROM ProOut PO,Product PWHERE P.ProNo=PO.ProNoGROUP BY P.ProNo,P.ProNameGO3创建视图V_Sale3,统计销售金额在10万以下的产品信息。CREATE VIEW V_Sale3AS SELECT P.ProNo,P.ProName FROM ProOut PO,Product P WHERE P.ProNo=PO.ProNo GROUP BY P.ProNo,P.ProName HAVING SUM(Price*Quantity)100000GO单元11(保证数据安全性_存储过程)本实训使用Sale数据库。1创建存储过P_Sale1,统计每种产品的销售数量和销售金额。CREATE PROCEDURE P_Sale1AS SELECT Product.ProNo,ProName,Price,Sl=SUM(Quantity),Je=SUM(Price*Quantity) FROM ProOut,Product WHERE ProOut.ProNo=Product.ProNo GROUP BY Product.ProNo,ProName,PriceGO-调用EXEC P_Sale12创建存储过程P_Sale2,能够根据指定的客户统计汇总该客户购买每种产品的数量和花费金额。CREATE PROCEDURE P_Sale2 CusNo nvarchar(3)AS SELECT Product.ProNo,ProName,Price,Sl=SUM(Quantity),Je=SUM(Price*Quantity) FROM ProOut,Product WHERE ProOut.ProNo=Product.ProNo AND CusNo=CusNo GROUP BY Product.ProNo,ProName,PriceGO-调用EXEC P_Sale2 001EXEC P_Sale2 002GO3创建存储过程P_Sale3,能够根据指定的产品编号和日期,以输出参数的形式得到该产品的销售金额。USE SALEGOCREATE PROCEDURE P_Sale3ProNo nvarchar(5),SaleDate DateTime,Je Decimal(8,2) OUTPUTASSET Je=(SELECT SUM(Price*Quantity) FROM ProOut,ProductWHERE ProOut.ProNo=Product.ProNo AND Product.ProNo=ProNo AND SaleDate=SaleDateGROUP BY Product.ProNo,ProName,Price)print jeGO-调用DECLARE Je Decimal(8,2)EXEC P_Sale3 00001,2006-1-1,JeGO单元12(实现业务逻辑(触发器)本实训使用Sale数据库。1创建触发器,实现即时更新每种产品的库存数量。-对入库表进行增加、修改入库数量、删除数据时-向ProIn表输入数据时(入库),Product表库存Stocks=库存+入库的数量QuantityCREATE TRIGGER T_INSERT_ProInON ProInFOR INSERTAS UPDATE Product SET Stocks=Stocks+(SELECT Quantity FROM INSERTED) WHERE ProNo=(SELECT ProNo FROM INSERTED) PRINT 已更新产品表的库存数量GO-测试INSERT ProInvalues(2006-3-5,00003,100)GO-删除ProIn一行数据时,Product表库存Stocks=库存-入库表的数量QuantityCREATE TRIGGER T_DELETE_ProInON ProInFOR DELETEAS UPDATE Product SET Stocks=Stocks-(SELECT Quantity FROM DELETED) WHERE ProNo=(SELECT ProNo FROM DELETED) PRINT 已更新产品表的库存数量GO-测试DELETE ProInWHERE InputDate=2006-3-3 and ProNo=00003GO-修改ProIn表的Quantity入库数量时CREATE TRIGGER T_UPDATE_ProInON ProInFOR UPDATEAS IF UPDATE(Quantity) BEGIN UPDATE Product SET Stocks=Stocks+(SELECT Quantity FROM INSERTED)WHERE ProNo=(SELECT ProNo FROM INSERTED)UPDATE Product -测试UPDATE ProInSET Quantity=500WHERE InputDate=2006-3-5 and ProNo=00003GO-在销售表上创建触发器CREATE TRIGGER T_INSERT_ProOutON ProOutFOR INSERTAS IF (SELECT Quantity FROM INSERTED)=(SELECT Stocks FROM Product WHERE ProNo=(SELECT ProNo FROM INSERTED) BEGIN UPDATE Product SET Stocks=Stocks-(SELECT Quantity FROM INSERTED) 写到这里了 WHERE ProNo=(SELECT ProNo FROM INSERTED) PRINT 已更新产品表的库存数量 END ELSE BEGIN PRINT 销售数量低于库存量,不能销售! ROLLBACK TRAN ENDGO-测试INSERT ProOutVALUES(2006-3-6,001,00003,1000)GOCREATE TRIGGER T_DELETE_ProOutON ProOutFOR DELETEAS UPDATE Product SET Stocks=Stocks+(SELECT Quantity FROM DELETED) WHERE ProNo=(SELECT ProNo FROM DELETED) PRINT 已更新产品表的库存数量GO-测试DELETE ProOutWHERE SaleDate=2006-3-6 and ProNo=00003 AND QUANTITY=1000GO2使用IF UPDATE(column)尽可能优化上题中的触发器以提高系统效率。CREATE TRIGGER T_UPDATE_ProOutON ProOutFOR UPDATEAS IF UPDATE(Quantity) BEGINUPDATE Product SET Stocks=Stocks-(SELECT Quantity FROM INSERTED) WHERE ProNo=(SELECT ProNo FROM INSERTED)UPDATE Product SET Stocks=Stocks+(SELECT Quantity FROM DELETED)WHERE ProNo=(SELECT ProNo FROM DELETED) PRINT 已更新产品表的库存数量 END GOUPDATE ProOutSET Quantity=50WHERE SaleDate=2006-1-1 and CusNo=001 and ProNo=00001 and Quantity=10GOCREATE TRIGGER T3ON ProIn FOR UPDATEA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论