当前位置:文档之家› 实验五视图、存储过程与触发器的应用

实验五视图、存储过程与触发器的应用

实验五视图、存储过程与触发器的应用准备工作:
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
(3)为student数据库中的teacher表创建一个名为update_teacher的UPDATE触发器,该触发器的作用是禁止更新teacher表中的“系别”字段的内容。

USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='update_teacher' AND type='TR')
DROP TRIGGER update_teacher
GO
CREATE TRIGGER update_teacher
ON teacher
AFTER UPDATE
AS
IF UPDATE(系别)
BEGIN
PRINT ‘YOU CAN NOT UPDATE THIS FIELD’
ROLLBACK
END
GO
(4)禁用update_teacher触发器。

ALTER TABLE teacher
DISABLE TRIGGER update_teacher
(5)启用update_teacher触发器。

ALTER TABLE teacher
ENABLE TRIGGER update_teacher
(6)删除update-teacher触发器。

DROP TRIGGER update-teacher。

相关主题