ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:20.97KB ,
资源ID:3527021      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3527021.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(存储过程函数与触发器操作答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

存储过程函数与触发器操作答案.docx

1、存储过程函数与触发器操作答案存储过程、函数与触发器操作实验一、实验目的与要求1、掌握存储过程的使用。2、掌握函数的使用。3、掌握触发器操作。二、实验平台1、操作系统:Windows XP或Windows 20032、数据库管理系统:SQL Server 2005三、实验内容一、存储过程1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。CREATE PROCEDURE Proc_StudentInfo ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息2、用EXECUTE执行Proc

2、_StudentInfo存储过程。EXECUTE Proc_StudentInfo3、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。CREATE PROCEDURE Proc_GetClassStudent1 ClassID varchar(14)AS SELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=ClassID4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为20031340000102 。CREATE PROCEDURE Proc_GetClassStudent2 Cla

3、ssID varchar(14)= 20031340000102 ASSELECT 学号,姓名,性别,班级编号,年级,籍贯FROM 学生信息WHERE 班级编号=ClassID EXECUTE Proc_GetClassStudent2 200313400001038、创建一个返回执行代码为100的存储过程。CREATE PROCEDURE Proc_GetClassStudent4 ClassID varchar(14) AS SELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息 WHERE 班级编号=ClassID RETURN 1009、执行存储过程Proc_GetC

4、lassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执行返回代码。DECLARE return1 int,return2 intEXEC return1=Proc_GetClassStudent2 20031340000102EXEC return2=Proc_GetClassStudent4 20031340000102SELECT return1SELECT return210、在TeachingManageSYS中创建一个名为GetStudentScore的存储过程,用于实现:由执行该存储过程时提供的学生的Sno(学号)查询其每门课程的Score(成

5、绩),并返回学生的Sno(学号)、Sname(姓名)、Ssex(性别)、Cname(课程的课程名)(使用“学生成绩查询”存储过程,查询学号为“010101”和“010201”的学生的成绩。)create procedure GetStudentScoreStudentID varchar(14)asselect StudentInfo.Sno 学号,Sname 姓名,Ssex 性别,Cname 课程名,Score 成绩from StudentInfo,CourseInfo,StudentCoursewhere StudentCourse.Sno=StudentInfo.Sno and Stud

6、entCourse.Cno=CourseInfo.Cnoand StudentInfo.Sno=StudentID exec GetStudentScore 010101 exec GetStudentScore 010201 11、在TeachingManageSYS中创建一个名为GetTeacherOrStudentInfo的存储过程,用于实现:由执行该存储过程时提供的查询类别(“教师”或“学生”,默认值为“学生”)和学生姓名或教师姓名,查询学生或教师信息。(使用教师姓名“邵军”和学生姓名“付佳燕”分别执行存储过程)create procedure GetTeacherOrStudentI

7、nfo 姓名char (10), class char(4)asif(class=教师) select * from TeacherInfo where Tname=姓名else select * from StudentInfo where Sname=姓名exec GetTeacherOrStudentInfo 邵军,教师exec GetTeacherOrStudentInfo 付佳燕,学生12、在commoditysell中创建一个名为GetFactProd的存储过程,用于实现:由执行该存储过程时提供的厂家的名称,查询其生产的产品信息,返回产品的ProdID、ProdName、UnitP

8、rice和StockAmount。(使用“四川绵阳”和“上海黄埔”两个厂家的名称执行存储过程)create proc GetFactProdFactAddr char(20)as select ProdID,ProdName,UnitPrice,StockAmountfromProductInfowhere FactAddr=FactAddr exec GetFactProd 四川绵阳exec GetFactProd 上海黄埔13、在commoditysell中创建一个名为SellProdAmount的存储过程,用于实现:由执行该存储过程时提供的商场的名称,查询其销售的产品数量,并用输出参数输

9、出销量数。(使用“双桥子商场”和“十陵商场”两个商场名称执行程存储过程)create procedure SellProdAmount EmpName char(20)as select EmporiumInfo.EmpName,sum(SellAmout) as 销售量from EmporiumSell,EmporiumInfowhere EmporiumSell.EmpID=EmporiumInfo.EmpIDand EmpName=EmpNamegroup by EmporiumInfo.EmpNameexec SellProdAmount 双桥子商场exec SellProdAmoun

10、t 十陵商场14、在教务管理系统中创建一个名为GetStudentScoreInfo的存储过程,用于实现:由执行该存储过程时提供的学生姓名,使用输出参数输出学生成绩的总分、最高分和最低分。(使用“冬云”和“张宇宏”两个学生姓名执行存储过程)create procedure GetStudentScoreInfostudentname char(8)as select sum(成绩表.成绩) as 总分,max(成绩表.成绩) as 最高分,min(成绩表.成绩) as 最低分from 成绩表,学生信息where 成绩表.学号=学生信息.学号and 学生信息.姓名=studentnamegrou

11、p by 成绩表.学号exec GetStudentScoreInfo studentname =朱志exec GetStudentScoreInfo studentname =张宇宏二、函数练习1、TeachingManageSYS创建一个内嵌表值函数chengji1,实现根据姓名查询该学生所有课程的成绩。CREATE FUNCTION chengji1(xname_in char(10)RETURNS TABLEAS RETURN (select Cname, Score from StudentCourse, StudentInfo, CourseInfoWHERE StudentInf

12、o.Sno=StudentCourse.Sno ANDCourseInfo.Cno=StudentCourse.Cno AND Sname=xname_in)select * from chengji1(魏士斌)2、TeachingManageSYS创建一个内嵌表值函数TeacherCourse,实现根据输入的Tno(教师编号)该教师的姓名和所授课程的课程号。CREATE FUNCTION TeacherCourse(number char(25)RETURNS TABLEASRETURN (SELECT TnameFROM TeacherInfo WHERE Tno=numberUNION

13、SELECT CnoFROM TeachWHERE Tno=number)3、TeachingManageSYS创建一个多语句表值函数,实现查询某一课程的考试成绩。CREATE FUNCTION all_score(cname_in char(10)RETURNS all_score_tab table(Sno char(6) primary key,Sname char(10) not null,Ssex char(2),Score real)ASBEGININSERT all_score_tabSELECT a.Sno,a.Sname,a.Ssex,b.ScoreFROM StudentI

14、NFO a,StudentCourse b,CourseINFO cWHERE a.Sno=b.Sno AND b.Cno=c.Cno AND c.Cname=cname_inRETURNEND select * from all_score(数据库原理)三、触发器练习1、设计一个简单的AFTER INSERT触发器,这个触发器的作用是:在插入一条记录的时候,发出“又添加了一个学生的成绩”的友好提示。 CREATE TRIGGER score_insert ON 成绩表 AFTER INSERT AS BEGIN PRINT 又添加了一个学生的成绩 END GOinsert into 成绩表(

15、学号,课程编号,成绩) values(200130000146,51,87)2、设计一个简单的AFTER UPDATE触发器,这个触发器的作用是:在修改一条记录的时候,发出“又修改了一个学生的成绩”的友好提示。 CREATE TRIGGER score_update ON 成绩表 AFTER UPDATE AS BEGIN PRINT 又修改了一个学生的成绩 ENDupdate 成绩表set 成绩=93 where 学号=200130000146 and 课程编号=513、设计一个简单的AFTER DELETE触发器,这个触发器的作用是:在删除一条记录的时候,发出“又删除了一个学生的成绩”的友

16、好提示。 CREATE TRIGGER score_delete ON 成绩表 AFTER DELETE AS BEGIN PRINT 又删除了一个学生的成绩 ENDdelete 成绩表where 学号=200130000146 and 课程编号=515、在score表上创建一个instead of insert触发器,实现:当向表score插入记录时检查分数的合理性,如果不合理就不进行插入操作,否则允许。create trigger score_insert_insteadon 成绩表instead of insertasbeginset nocount ondeclare score in

17、tselect score=成绩 from insertedif(score100) print 分数不合理else insert into 成绩表(学号,课程编号,成绩) select 学号,课程编号,成绩from inserted endinsert into 成绩表(学号,课程编号,成绩) values(200130000146,51,87)6、在score表上创建一个instead of delete触发器,实现:当从表score删除记录时检查各课程的成绩是否为空,如果为空就不允许进行删除操作,否则允许。create trigger score_delete_insteadon 成绩表

18、instead of deleteasbeginset nocount ondeclare id int,score intselect id=编号,score=成绩from deletedif(score=0) print 成绩正常,不能删除该记录else delete from 成绩表where 编号=idenddelete from 成绩表where 编号=10207、在score表上创建一个instead of update触发器,实现:当从表score更新记录时检查当前用户是否是dbo,如果不是dbo就不允许进行更新操作,否则允许。create trigger score_updat

19、e_insteadon 成绩表instead of updateasbeginset nocount ondeclare score1 int,score2 int,current_user varchar(10)select score1=成绩from insertedselect score2=成绩from deletedif(current_user !=dbo1) print 不是dbo用户不能修改学生姓名信息elseprint current_userupdate 成绩表set 成绩=score1 where 成绩=score2end update 成绩表set 成绩=93 wher

20、e 学号=200130000146 and 课程编号=518、在视图v_score创建一个instead of insert触发器,实现:从视图v_score插入记录时,提示从视图v_score插入一条记录。create view v_scoreasselect 学号,课程编号,成绩from 成绩表create trigger v_score_inserton v_scoreinstead of insertasbegininsert into 成绩表(学号,课程编号,成绩) select * from insertedprint 从视图v_score插入了一条记录endinsert into

21、 v_score values(200130000146,51,97)9、建立一个DDL触发器,用于保护数据库中的数据表不被修改,不被删除。 CREATE TRIGGER 禁止对数据表操作 ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT 对不起,您不能对数据表进行操作 ROLLBACKALTER Table 成绩表ADD CONSTRAINT Score_CHECKCheck(课程编号=0 and 课程编号=100)10、建立一个DDL触发器,用于保护当前SQL Server服务器里所有数据库不能被删除。 CREATE TRIGGER 不允许删

22、除数据库 ON all server FOR DROP_DATABASE AS PRINT 对不起,您不能删除数据库 ROLLBACK drop database TeachingManageSYS11、给score表创建一个after insert触发器,实现:当向score插入记录时,提示向score表插入了内容为:的记录,也就是把插入表中的记录信息显示出来。CREATE TRIGGER 显示_Insert ON 成绩表 AFTER INSERT AS BEGIN Declare 编号int,学号varchar(14),课程编号int,成绩int select 编号=编号,学号=学号,课程

23、编号=课程编号,成绩=成绩from inserted print 插入的记录为:+CAST(编号 AS varchar(16)+, +学号+, +CAST(课程编号AS varchar(16)+, +CAST(成绩AS varchar(6) ENDinsert into 成绩表(学号,课程编号,成绩) values(200130000146,51,87)12、给score表创建一个after update触发器,实现:更新score表时,提示把score表内容为:的记录更新为:,也就是把更新表中的记录信息显示出来。CREATE TRIGGER 显示_update ON 成绩表 AFTER up

24、date AS Declare 编号int,学号varchar(14),课程编号int,成绩int,学号varchar(14),课程编号int,成绩int select 编号=编号,学号=学号,课程编号=课程编号,成绩=成绩from deleted select 学号=学号,课程编号=课程编号,成绩=成绩from inserted print 编号为:+CAST(编号AS varchar(16) print 修改前的记录为:+学号+, +CAST(课程编号AS varchar(16)+, +CAST(成绩AS varchar(6) print 修改后的记录为:+学号+, +CAST(课程编号A

25、S varchar(16)+, +CAST(成绩AS varchar(6)update 成绩表set 成绩=100 where 编号=102513、给score表创建一个after delete触发器,实现:当向score删除记录时,提示从score表删除了内容为:的记录,也就是把删除的记录信息显示出来。CREATE TRIGGER 显示_delete ON 成绩表 AFTER delete AS Declare 编号int,学号varchar(14),课程编号int,成绩int select 编号=编号,学号=学号,课程编号=课程编号,成绩=成绩from deleted print 删除的记

26、录为:+CAST(编号AS varchar(16)+, +学号+, +CAST(课程编号AS varchar(16)+, +CAST(成绩AS varchar(6)delete from 成绩表where 编号=104114、commoditysell库中给sell表创建一个after insert 触发器,实现:当向sell插入一条记录时,修改stock表中的stock_amount(库存数量),值等于stock_amount-sell_amount,还有修改时间modified_date,并显示相应的提示信息:“库存量还剩余stock_amount-sell_amount”,当(stock

27、_amount-sell_amount)0时,不允许进行插入操作,即操作回滚,并显示相应的提示信息:“库存量不足,只有stock_amount”。附stock、sell表信息stock(prod_id char(10),prod_name varchar(10),unit_price int,stock_amount int,modified_date datetime)sell(order_id int identity(1,1),prod_id char(10),sell_amount int,sell_date datetime,Saler varchar(10)create table

28、stock(prod_id char(10) primary key,prod_name varchar(10),unit_price int,stock_amount int,modified_date datetime)create tablesell(order_id int identity(1,1) primary key,prod_id char(10) foreign key references stock(prod_id),sell_amount int ,sell_date datetime,Saler varchar(10)insert into stock values

29、(10001,三星手机,2999,10,2013-4-10)CREATE TRIGGER sell_Insert ON sell AFTER INSERT AS Declare prod_id int,sell_amount int,stock_amount int select prod_id=prod_id,sell_amount=sell_amount from inserted select stock_amount=stock_amount-sell_amount from stock -stock_amount=6 if(stock_amount0) begin ROLLBACK

30、transaction print 库存量还剩余,只有+CAST(stock_amount+2 AS varchar(6) end else begin print 库存量还剩余+CAST(stock_amount AS varchar(6) update stock set stock_amount=stock_amount where prod_id=prod_idend insert into sell values(10001,2,2013-4-11,101) 15、在sell表中创建一个instead of insert触发器,实现14题的功能。16、在stock表中创建一个after delete触发器,实现:当删除stock表中记录时,如果记录的stock_amount不为零,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1