版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
37205-00_SQLServer2005课后实训参考答案课后实训参考答案单元1(SQLServer概述)1、使用SQL语句。在Sale数据库中创建名为MyDataType的用户定义数据类型,数据类型为NVARCHAR,长度为20,该列允许为NULL。USESaleGOEXECsp_addtypeMyDataType,'NVARCHAR(20)','NULL'GO单元2(单表数据)使用查询窗口或sqlcmd实施查询。本实训使用Xk数据库。--1.查看系部编号为“03”的系部名称。USEXkGOSELECTDepartNameFROMDepartmentWHEREDepartNo='03'GO--2.查看系部名称中包含有“工程”两个字的系的全名。USEXk徐人凤共1页5/19/201511GOSELECTDepartNameFROMDepartmentWHEREDepartNameLIKE'%工程%'GO--3.显示共有多少个系部。USEXKGOSELECT'系部总数'=COUNT(*)FROMDepartmentGO--4.显示“01”年级共有多少个班级。USEXKGOSELECT'01级班级数'=COUNT(*)FROMClassWHEREClassNoLIKE'2001%'GOSELECT'01级班级数'=COUNT(*)FROMClass徐人凤共2页5/19/201522WHEREClassNameLIKE'01%'GOSELECT'01级班级数'=COUNT(*)FROMStudentWHEREClassNoLIKE'2001%'GO--5.查看在“周二晚”上课的课程名称和教师。USEXKGOSELECT'课程名称'=CouName,'任课教师'=TeacherFROMCourseWHERESchoolTime='周二晚'GO--6.查看姓“张”、“陈”、“黄”同学的基本信息,要求按照姓名降序排序查询结果。USEXKGOSELECT*FROMStudentWHEREStuNameLIKE'张%'OR徐人凤共3页5/19/201533StuNameLIKE'陈%'ORStuNameLIKE'黄%'ORDERBYStuNameDESCGO--方法USEXKGOSELECT*FROMStudentWHEREStuNamelike'[张,陈,黄]%'ORDERBYStuNameDESCGO徐人凤共4页5/19/201544单元2(多表查询)--1.按系部统计课程的平均报名人数,要求显示系部名称、平均报名人数。SELECT'系部名称'=DepartName,'平均报名人数'=AVG(WillNum)FROMCourseC,DepartmentDWHEREC.DepartNo=D.DepartNoGROUPBYDepartNameGO--如果小数点后只保留位SELECT'系部名称'=DepartName,'平均报名数'=CONVERT(DECIMAL(5,2),AVG(WillNum))FROMCourseC,DepartmentDWHEREC.DepartNo=D.DepartNoGROUPBYDepartNameGO--2.统计各个系部的班级数,要求显示系部编号、系部名称和班级数量。SELECTC.DepartNo,DepartName,COUNT(*)徐人凤共5页5/19/201555FROMClassC,DepartmentDWHEREC.DepartNo=D.DepartNoGROUPBYC.DepartNo,DepartNameGO--3.查看“甘蕾”同学选修的课程名、学分、上课时间、志愿号,按志愿号(升序)排序查询结果。SELECTCouName,Credit,SchoolTime,WillOrderFROMStuCouSC,CourseC,StudentSWHERESC.CouNo=C.CouNoANDSC.StuNo=S.StuNoANDStuName='甘蕾'ORDERBYWillOrderGO--4.查看“00电子商务”班的选修报名情况。要求显示学号、姓名、课程编号、课程名称、志愿号,并按学号(升序)、志愿号排序(升序)。SELECTS.StuNo,StuName,C.CouNo,CouName,WillOrderFROMStuCouSC,CourseC,StudentS,ClassCLWHERESC.CouNo=C.CouNoANDSC.StuNo=S.StuNoANDCL.ClassNo=S.ClassNoAND徐人凤共6页5/19/201566ClassNameLike'00电子商务'ORDERBYS.StuNo,WillOrderGO--5.按系部统计各系的最少报名人数、最多报名人数、平均报名人数和报名总数,并汇总显示所有系部的报名总数。要求平均报名人数保留两位小数位。SELECT'系部名称'=DepartName,'最少报名人数'=MIN(WillNum),'最多报名人数'=MAX(WillNum),'平均报名人数'=CONVERT(DECIMAL(5,2),AVG(WillNum)),'报名总数'=SUM(WillNum)FROMCourseC,DepartmentDWHEREC.DepartNo=D.DepartNoGROUPBYDepartNameWITHCUBEGO徐人凤共7页5/19/201577单元3(维护数据)--12.学号为“00000025”的同学第一志愿报名选修“001”课程,请在数据库中进行处理。INSERTStuCou(StuNo,CouNo,WillOrder,State)VALUES('00000025','001',1,'报名')GO/*课程报名人数增加人*/UPDATECourseSETWillNum=WillNum+1WHERECouNo='001'GO--2.删除学号为“00000025”的学生的选课报名信息。DELETEStuCouWHEREStuNo='00000025'GO/*课程表'00000025'同学报名的那些课程报名人数都要减少1*/--方法:UPDATECourseSETWillNum=WillNum-1徐人凤共8页5/19/201588FROMCourse,StuCouWHEREStuNo='00000025'andCourse.CouNo=StuCou.CouNoGO--方法2:(游标)DECLARE@CouNochar(3)DECLAREMYCursorcursorforSELECTCouNofromStuCouWHEREStuNo='00000025'OPENMYCursorFETCHNEXTFROMMYCursorINTO@CouNoWHILE@@FETCH_STATUS=0BEGINUPDATECourseSETWillNum=WillNum-1WHERECouNo=@CouNoFETCHNEXTFROMMYCursorINTO@CouNoENDCLOSEMYCursorDEALLOCATEMYCursorGO徐人凤共9页5/19/201599--3.需要将“00多媒体”班级“杜晓静”同学的名字修改为“杜小静”。UPDATEStudentSETStuName='杜小静'FROMStudentS,ClassCWHERES.ClassNo=C.ClassNoANDStuName='杜晓静'ANDClassName='00多媒体'GO--“00电子商务”班的“林斌”同学申请将已选修的“网络信息检索原理与技术”课程修改为“Linux操作系统”。UPDATEStuCouSETCouNo=(SELECTCouNoFROMCourseWHERECouName='Linux操作系统')FROMStuCouSC,StudentS,CourseC,ClassClWHERESC.StuNo=S.StuNoANDSC.CouNo=C.CouNoANDS.ClassNo=Cl.ClassNoANDS.StuName='林斌'ANDCl.ClassName='00电子商务'ANDCouName='网络信息检索原理与技术'徐人凤共10页5/19/20151010GO徐人凤共11页5/19/20151111单元4(数据库设计)某公司计划对产品的销售情况进行计算机管理。产品表具有产品编号、产品名称、单价、库存数量4个属性。客户表包括有客户编号、客户姓名、住址、联系电话4个属性。产品的入库表包括有入库日期、产品编号、产品名称、入库数量、单价属性。销售表包括有销售日期、产品编号、产品名称、客户编号、客户姓名、单价、销售数量。1.绘出产品销售的E-R图。2、将产品销售的E-R图转换为关系数据模型。产品表:徐人凤共12页5/19/20151212客户表:入库表:销售表:3、将产品销售关系数据模型规范为Ⅲ范式。可参考“创建和管理表”实训题。徐人凤共13页5/19/201513134、请分析主键、外键、公共键。主键:产品表的产品编号,客户表的客户编号。外键:入库表的产品编号,销售表的产品编号、客户编号。5、举例说明如何保证产品销售数据的完整性。表数据完整性:给产品表、客户表创建主键。列数据的完整性:可以给指定的列创建约束(参见实施数据完整性实训题目)。参照完整性:给入库表、销售表创建外键。徐人凤共14页5/19/20151414单元5(创建与管理数据库)写出实现如下功能的SQL语句。1.创建名字为Sale的销售数据库。该数据库有一个名为Sale.mdf的主数据文件和名字为Sale_log.ldf的事务日志文件。主数据文件容量为4MB,日志文件容量为10MB,数据文件和日志文件的最大容量为20MB,文件增长量为1MB。CREATEDATABASESaleONPRIMARY(NAME=Sale,FILENAME='C:\Sale.mdf',SIZE=4,MAXSIZE=10,FILEGROWTH=1)LOGON(NAME=Sale_log,FILENAME='D:\Sale_log.ldf',SIZE=2,MAXSIZE=10,FILEGROWTH=1)/*注意结尾处无逗号*/GO徐人凤共15页5/19/201515152.在Sale数据库下新增名字为UserGroup的文件组。USESaleGoALTERDATABASESaleADDFILEGROUPUserGroupGo3.以增加次数据文件的方式扩充Sale数据的容量。次数据文件容量为5MB,最大容量为10MB,文件增量为1MB。要求将次数据文件保存在与事务日志文件不同的存储设备上,次数据文件作为UserGroup文件组的成员。USEMASTERGOALTERDATABASESaleADDFILE(NAME=Sale2,FILENAME='C:\Sale2.ndf',SIZE=5MB,MAXSIZE=10MB,FILEGROWTH=1MB)TOFILEGROUPUserGroupGO徐人凤共16页5/19/201516164.使用存储过程显示Sale数据库的信息。SP_helpdbSaleGO徐人凤共17页5/19/20151717单元6(创建与管理数据表)1.实训项目都是围绕Sale数据库展开,进销存系统通常包括客户资料、产品信息、进货记录、销售记录等。所以针对Sale数据库,设计表了表1-4,数据请见表5-8,并将在后续章节逐步完善。使用Transcact-SQL语句,在Sale数据库下创建客户表、产品表、入库表和销售表并输入数据。请将脚本保存为.sql文件。表1Customer(客户表)结构表2Product(产品表)结构表3ProIn(入库表)结构徐人凤共18页5/19/20151818表4ProOut(销售表)结构表5Customer(客户表)数据表6Product(产品表)数据徐人凤共19页5/19/20151919表7ProIn(入库表)数据表8ProOut(销售表)数据徐人凤共20页5/19/20152020--该题创建表时同时创建主键、外键。先创建表,再创建主键、外键的方法参见照实训5_3UseSaleGoCREATETABLECustomer(CusNonvarchar(3)Primarykey,CusNamenvarchar(10)notnull,Addressnvarchar(20),TelChar(20))Go/*创建产品表*/CREATETABLEProduct(ProNonvarchar(5)Primarykey,ProNamenvarchar(20)notnull,PriceDecimal(8,2)notnull,StocksDecimal(8,0)notnull)Go/*创建入库表*/徐人凤共21页5/19/20152121CREATETABLEProIn(InputDateDateTimenotnull,ProNonvarchar(5)ReferencesProduct(ProNo),QuantityDecimal(6,0)notnull)Go/*创建销售表*/CREATETABLEProOut(SaleDateDateTimenotnull,CusNonvarchar(3)notnullReferencesCustomer(CusNo),ProNonvarchar(5)notnullReferencesProduct(ProNo),QuantityDecimal(6,0)notnull)Go--向Customer表输入数据--INSERTINTOCustomerVALUES('001','杨婷','深圳','#39;)INSERTINTOCustomerVALUES('002','陈萍','深圳徐人凤共22页5/19/20152222','#39;)INSERTINTOCustomerVALUES('003','李东','深圳','#39;)INSERTINTOCustomerVALUES('004','叶合','广州','#39;)INSERTINTOCustomerVALUES('005','谭新','广州','#39;)Go--向Product表中插入数据--INSERTINTOProductVALUES('00001','电视',3000.00,800)INSERTINTOProductVALUES('00002','空调',2000.00,500)INSERTINTOProductVALUES('00003','床',1000.00,300)INSERTINTOProductVALUES('00004','餐桌',1500.00,200)INSERTINTO徐人凤共23页5/19/20152323ProductVALUES('00005','音响',5000.00,600)INSERTINTOProductVALUES('00006','沙发',6000.00,100)Go--向ProIn表中插入数据--INSERTINTOProInVALUES('2006-1-1','00001',10)INSERTINTOProInVALUES('2006-1-1','00002',5)INSERTINTOProInVALUES('2006-1-2','00001',5)INSERTINTOProInVALUES('2006-1-2','00003',10)INSERTINTOProInVALUES('2006-1-3','00001',10)INSERTINTOProInVALUES('2006-2-1','00003',20)INSERTINTOProInVALUES('2006-2-2','00001',10)INSERTINTOProInVALUES('2006-2-3','00004',30)徐人凤共24页5/19/20152424INSERTINTOProInVALUES('2006-3-3','00003',20)Go--向ProOut表中插入数据--INSERTINTOProOutVALUES('2006-1-1','001','00001',10)INSERTINTOProOutVALUES('2006-1-2','001','00002',5)INSERTINTOProOutVALUES('2006-1-3','002','00001',5)INSERTINTOProOutVALUES('2006-2-1','002','00003',10)INSERTINTOProOutVALUES('2006-2-2','001','00001',10)INSERTINTOProOutVALUES('2006-2-3','001','00003',20)INSERTINTOProOutVALUES('2006-3-2','003','00001',10)INSERTINTOProOutVALUES('2006-3-2','003','00004',30)INSERTINTO徐人凤共25页5/19/20152525ProOutVALUES('2006-3-3','002','00003',20)Go徐人凤共26页5/19/20152626单元7(实施数据完整性)1.根据你的理解,请在实训5_2的表1-4的备注栏中标出主键、外键。表1Customer(客户表)结构表2Product(产品表)结构表3ProIn(入库表)结构徐人凤共27页5/19/20152727表4ProOut(销售表)结构--该题适用于创建表时没有创建主键、外键的情况/*Customer表的主键为CusNo*/ALTERTABLECustomerADDCONSTRAINTPK_CustomerPRIMARYKEY(CusNo)GO/*Product表的主键为ProNo*/ALTERTABLEProductADDCONSTRAINTPK_ProductPRIMARYKEY(ProNo)GO/*外键:ProOut表的ProNo*/徐人凤共28页5/19/20152828ALTERTABLEProOutADDCONSTRAINTFK_ProOut_ProductFOREIGNKEY(ProNo)REFERENCESProduct(ProNo)/*外键:ProOut表的CusNo*/ALTERTABLEProOutADDCONSTRAINTFK_ProOut_CustomerFOREIGNKEY(CusNo)REFERENCESCustomer(CusNo)/*外键:ProIn表的ProNo*/ALTERTABLEProInADDCONSTRAINTFK_ProIn_ProductFOREIGNKEY(ProNo)REFERENCESProduct(ProNo)--3.约束客户表Customer的CusNo列值长度为3;产品表Product的ProNo列值长度为5。ALTERTABLECustomerADDCONSTRAINTCK_Customer_CusNoCHECK(LEN(CusNo)=3)徐人凤共29页5/19/20152929GOALTERTABLEProductADDCONSTRAINTCK_Product_ProNoCHECK(LEN(ProNo)=5)GO--测试:INSERTINTOProductVALUES('000071','平板电脑',3000.00,800)GO--系统会自动截断为长度5位。--测试:INSERTINTOProductVALUES('009','DVD',3000.00,800)GO4.对产品表Product的Stocks列、Price列、入库表ProIn的Quantity列、销售表ProOut的Quantity列值进行约束,使其值必须大于0。ALTERTABLEProductADDCONSTRAINTCK_Product_StocksCHECK(Stocks>0)GO徐人凤共30页5/19/20153030ALTERTABLEProductADDCONSTRAINTCK_Product_PriceCHECK(Price>0)GOALTERTABLEProInADDCONSTRAINTCK_ProIn_QuantityCHECK(Quantity>0)GOALTERTABLEProOutADDCONSTRAINTCK_ProOut_QuantityCHECK(Quantity>0)GO5.对销售表ProOut的SaleDate列进行约束,当不输入值时,系统默认其值为系统当前日期。CREATEDEFAULTCurrentDateASGETDATE()GOEXECsp_bindefaultCurrentDate,'ProOut.SaleDate'GO徐人凤共31页5/19/20153131单元8(提高查询速度)本单元实训使用Sale数据库。1.用户按照CusName(客户姓名)查询客户信息,希望提高查询速度。USESaleGOCREATEINDEXIX_CustomerONCustomer(CusName)GO2.用户按照ProName(产品名称)查询产品信息,希望提高查询速度。USESaleGOCREATEINDEXIX_ProductONProduct(ProName)GO3.用户按照SaleDate(销售日期)查询销售信息,希望提高查询速度。徐人凤共32页5/19/20153232USESaleGOCREATEINDEXIX_ProOutONProOut(SaleDate)GO徐人凤共33页5/19/20153333单元9(Transcact-SQL语言编程基础)本单元实训使用Sale数据库。1.计算有多少种产品(假设为@x),然后显示一条信息:共有x种产品。USESaleGODECLARE@xintSET@x=(SELECTCOUNT(*)FROMProduct)PRINT'共有'+convert(char(2),@x)+'种产品。'GO2.编写计算n!(n=20)的程序,并显示计算结果。DECLARE@iint,@PRODUCTFLOAT--定义整型变量@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)--显示徐人凤共34页5/19/20153434结果GO3、创建一自定义函数,能够利用该函数计算出销售总金额(数量Quantity*单价Price)。CREATEFUNCTIONGETProduct(@Quantitydecimal(6,0),@Pricedecimal(8,2))RETURNSdecimal(10,2)ASBEGINRETURN(@Quantity*@Price)END--测试SELECTPrice,Quantity,dbo.GETProduct(Price,Quantity)'ProductQu'FROMProduct,ProOutWHEREProduct.ProNo=ProOut.ProNoGO徐人凤共35页5/19/20153535单元10(保证数据安全性_视图)本实训使用Sale数据库。1.创建视图V_Sale1,显示销售日期、客户编号、客户姓名、产品编号、产品名称、单价、销售数量和销售金额。CREATEVIEWV_Sale1ASSELECTSaleDate,CusName,ProName,Price,Quantity,SaleMoney=(Price*Quantity)FROMProOutPO,CustomerC,ProductPWHEREP.ProNo=PO.ProNoANDC.CusNo=PO.CusNoGO2.创建视图V_Sale2,统计每种产品的销售数量和销售金额。统计结果包括:产品编号、产品名称、单价、销售数量和销售金额。CREATEVIEWV_Sale2ASSELECTP.ProNo,P.ProName,SaleQuantity=SUM(Quantity),SaleMoney=SUM(Price*Quantity)FROMProOutPO,ProductP徐人凤共36页5/19/20153636WHEREP.ProNo=PO.ProNoGROUPBYP.ProNo,P.ProNameGO3.创建视图V_Sale3,统计销售金额在10万以下的产品信息。CREATEVIEWV_Sale3ASSELECTP.ProNo,P.ProNameFROMProOutPO,ProductPWHEREP.ProNo=PO.ProNoGROUPBYP.ProNo,P.ProNameHAVINGSUM(Price*Quantity)<100000GO徐人凤共37页5/19/20153737单元11(保证数据安全性_存储过程)本实训使用Sale数据库。1.创建存储过P_Sale1,统计每种产品的销售数量和销售金额。CREATEPROCEDUREP_Sale1ASSELECTProduct.ProNo,ProName,Price,Sl=SUM(Quantity),Je=SUM(Price*Quantity)FROMProOut,ProductWHEREProOut.ProNo=Product.ProNoGROUPBYProduct.ProNo,ProName,PriceGO--调用EXECP_Sale12.创建存储过程P_Sale2,能够根据指定的客户统计汇总该客户购买每种产品的数量和花费金额。CREATEPROCEDUREP_Sale2@CusNonvarchar(3)徐人凤共38页5/19/20153838ASSELECTProduct.ProNo,ProName,Price,Sl=SUM(Quantity),Je=SUM(Price*Quantity)FROMProOut,ProductWHEREProOut.ProNo=Product.ProNoANDCusNo=@CusNoGROUPBYProduct.ProNo,ProName,PriceGO--调用EXECP_Sale2'001'EXECP_Sale2'002'GO3.创建存储过程P_Sale3,能够根据指定的产品编号和日期,以输出参数的形式得到该产品的销售金额。USESALEGOCREATEPROCEDUREP_Sale3@ProNonvarchar(5),@SaleDateDateTime,@JeDecimal(8,2)OUTPUT徐人凤共39页5/19/20153939ASSET@Je=(SELECTSUM(Price*Quantity)FROMProOut,ProductWHEREProOut.ProNo=Product.ProNoANDProduct.ProNo=@ProNoANDSaleDate=@SaleDateGROUPBYProduct.ProNo,ProName,Price)print@jeGO--调用DECLARE@JeDecimal(8,2)EXECP_Sale3'00001','2006-1-1',@JeGO徐人凤共40页5/19/20154040单元12(实现业务逻辑(触发器))本实训使用Sale数据库。1.创建触发器,实现即时更新每种产品的库存数量。--对入库表进行增加、修改入库数量、删除数据时--向ProIn表输入数据时(入库),Product表库存Stocks=库存+入库的数量QuantityCREATETRIGGERT_INSERT_ProInONProInFORINSERTASUPDATEProductSETStocks=Stocks+(SELECTQuantityFROMINSERTED)WHEREProNo=(SELECTProNoFROMINSERTED)PRINT'已更新产品表的库存数量'GO--测试INSERTProInvalues('2006-3-5','00003',100)徐人凤共41页5/19/20154141GO--删除ProIn一行数据时,Product表库存Stocks=库存-入库表的数量QuantityCREATETRIGGERT_DELETE_ProInONProInFORDELETEASUPDATEProductSETStocks=Stocks-(SELECTQuantityFROMDELETED)WHEREProNo=(SELECTProNoFROMDELETED)PRINT'已更新产品表的库存数量'GO--测试DELETEProInWHEREInputDate='2006-3-3'andProNo='00003'GO徐人凤共42页5/19/20154242--修改ProIn表的Quantity入库数量时CREATETRIGGERT_UPDATE_ProInONProInFORUPDATEASIFUPDATE(Quantity)BEGINUPDATEProductSETStocks=Stocks+(SELECTQuantityFROMINSERTED)WHEREProNo=(SELECTProNoFROMINSERTED)UPDATEProduct--测试UPDATEProInSETQuantity=500WHEREInputDate='2006-3-5'andProNo='00003'GO--在销售表上创建触发器徐人凤共43页5/19/20154343CREATETRIGGERT_INSERT_ProOutONProOutFORINSERTASIF(SELECTQuantityFROMINSERTED)<=(SELECTStocksFROMProductWHEREProNo=(SELECTProNoFROMINSERTED))BEGINUPDATEProductSETStocks=Stocks-(SELECTQuantityFROMINSERTED)写到这里了WHEREProNo=(SELECTProNoFROMINSERTED)PRINT'已更新产品表的库存数量'ENDELSEBEGINPRINT'销售数量低于库存量,不能销售!'ROLLBACKTRANENDGO徐人凤共44页5/19/20154444--测试INSERTProOutVALUES('2006-3-6','001','00003',1000)GOCREATETRIGGERT_DELETE_ProOutONProOutFORDELETEASUPDATEProductSETStocks=Stocks+(SELECTQuantityFROMDELETED)WHEREProNo=(SELECTProNoFROMDELETED)PRINT'已更新产品表的库存数量'GO--测试DELETEProOutWHERESaleDate='2006-3-6'andProNo='00003'ANDQUANTITY=1000GO徐人凤共45页5/19/201545452.使用IFUPDATE(column)尽可能优化上题中的触发器以提高系统效率。CREATETRIGGERT_UPDATE_ProOutONProOutFORUPDATEASIFUPDATE(Quantity)BEGINUPDATEProductSETStocks=Stocks-(SELECTQuantityFROMINSERTED)WHEREProNo=(SELECTProNoFROMINSERTED)UPDATEProductSETStocks=Stocks+(SELECTQuantityFROMDELETED)WHEREProNo=(SELECTProNoFROMDELETED)PRINT'已更新产品表的库存数量'ENDGOUPDATEProOutSETQuantity=50WHERESaleDate='2006-1-1'andCusNo='001'andProNo='00001'andQuantity=10徐人凤共46页5/19/20154646GOCREATETRIGGERT3ONProInFORUPDATEASIFUPDATE(Quantity)BEGINUPDATEProductSETStocks=Stocks+(SELECTQuantityFROMINSERTED)WHEREProNo=(SELECTProNoFROMINSERTED)UPDATEProductSETStocks=Stocks-(SELECTQuantityFROMDELETED)WHEREProNo=(SELECTProNoFROMINSERTED)ENDGOCREATETRIGGERT6ONProOutFORUPDATEAS徐人凤共47页5/19/20154747IFUPDATE(Quantity)BEGINUPDATEProductSETStocks=Stocks-(SELECTQuantityFROMINSERTED)WHEREProNo=(SELECTProNoFROMINSERTED)UPDATEProductSETStocks=Stocks+(SELECTQuantityFROMDELETED)WHEREProNo=(SELECTProNoFROMDELETED)ENDGO徐人凤共48页5/19/20154848单元13(逐行处理查询结果_游标)本实训使用Sale数据库。1.创建存储过程P_SelProduct,逐行显示产品销售信息,内容包括产品编号、产品名称、销售日期、销售数量、销售金额,要求显示格式如下:产品编号产品名称销售日期销售数量销售金额00001电视2006-1-11030000产品编号产品名称销售日期销售数量销售金额00002空调2006-1-2510000CREATEPROCEDUREP_SelProductASDECLARE@ProNonvarchar(5),@ProNamenvarchar(20),@SaleDateDateTime,@Quantitydecimal(6,0),@Jedecimal(8,2)--定义游标DECLARECrsCURSORFORSELECTP.ProNo,ProName,SaleDate,Quantity,Je=Price*Quanti徐人凤共49页5/19/20154949tyFROMProductP,ProOutPOWHEREP.ProNo=PO.ProNoORDERBYSaleDate--打开游标OPENCrs--取得第一行数据FETCHNEXTFROMCrsINTO@ProNo,@ProName,@SaleDate,@Quantity,@Je--通过判断@@FETCH_STATUS控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论