实验五视图、存储过程与触发器的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五视图、存储过程与触发器的应用准备工作:
1.创建数据库Student
2.生成一个表名为student的表
3
4.用企业管理器创建教工表teacher,要求如下:
一、目的与要求
1.掌握创建、修改、删除视图的SQL语句的用法。
2.掌握使用企业管管理器创建视图的方法。
3.了解存储过程基本概念和类型,掌握创建存储过程的方法和步骤。
4.掌握创建、查看、执行、修改和删除存储过程的SQL命令的用法。
5.了解触发器的基本概念和类型,掌握创建触发器的方法和步骤。
6.掌握创建查看、修改、使用和删除触发器的SQL命令的用法。
二、实验内容
视图
1. 在STUDENT库中以“student”表为基础,建立一个名为“V_经济管理系学生”的视图(注:经济管理系的系部代码为“02”)。在使用该视图时,将显示“student”表中的所有字段。
USE STUDENT
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name=' V_经济管理系学生' AND type='V')
DROP view V_经济管理系学生
GO
CREATE VIEW V_经济管理系学生
AS
select * from student
where sdept='02'
GO
2. 使用视图“V_经济管理系学生”查询经济管理系学生的信息。
Select * from V_经济管理系学生
3. 在查询分析器中使用更改视图的命令将视图“V_经济管理系学生”更名为“V_经管系男生”。
sp_rename V_经济管理系学生V_经管系男生
4. 修改“V_经管系男生”视图的内容。视图修改后,在使用该视图时,将得到经济管理系所有“男”学生的信息。
ALTER VIEW V_经管系男生
AS
SELECT * FROM student
where sdept='02' and sex='男'
GO
5. 删除视图“V_经管系男生”。
DROP VIEW V_经济管理系男生
使用存储过程
(1)使用STUDENT数据库中的学生表student、课程信息表Course、选课成绩表Sc,创建一个带参数的存储过程: cjjicx。该存储过程的作用是:当任意输入一个学生的姓名时,将从三个表中返回该学生的学号、选修的课程名称和课程成绩。
USE STUDENT
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='cjjicx' AND type='P')
DROP procedure cjjicx
GO
create procedure cjjicx
@sname char(8)
as
select sno,cname,grade from student,course,sc
where student.sno=sc.sno and o=o and sname=@sname
go
(2)执行cjjicx存储过程,查询“刘永辉”的学号、选修课程和课程成绩。excute cijicx @ sname =‘刘永辉’
(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。Sp_helptext cijicx
(4)使用STUDENT数据库中的学生表,为其创建一个加密的存储过程—jmxs。该存储过程的作用是:当执行该存储过程时,将返回计算机系学生的所有
信息。
(5)执行jmxs存储过程,查看计算机系学生的情况。
(6)删除jmxs存储过程。
Drop procedure jmxs
使用触发器
(1)在student数据库中建立一个名为insert_teacher的INSERT触发器,存储在teacher表中。该触发器的作用是:当用户向teacher表中插入记录时,如果插入了在teacher表中没有的系别类别,则提示用户不能插入记录,否则提示记录插入成功。
USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='insert_teacher' AND type='TR')
DROP TRIGGER insert_teacher
GO
CREATE TRIGGER insert_teacher
ON teacher
AFTER insert
AS
IF (SELECT 系别FROM inserted) not in(SELECT DISTINCT系别FROM teacher)
BEGIN
PRINT ‘YOU CAN NOT INSERT THIS RECORD’
ROLLBACK
END
ELSE
PRINT ‘INSERT FINISHED’
GO
(2)为student数据库中的teacher表创建一个名为dele_teacher的DELETE 触发器,该触发器的作用是禁止删除teacher表中的记录。
USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='dele_teacher' AND type='TR')
DROP TRIGGER dele_teacher
GO
CREATE TRIGGER dele_teacher
ON teacher
INSTEAD OF DELETE
AS
PRINT ‘YOU CAN NOT DELETE RECORDS’
GO