sqlserver数据库操作 实验九 存储过程和触发器 讲义

实验九 存储过程和触发器

一、 实验目的

1. 通过对常用系统存储过程的使用,了解存储过程的类型;

2. 通过创建和执行存储过程,了解存储过程的基本概念,掌握使用存储过程的操作技巧和方法;

3. 通过创建触发器,了解触发器的基本概念,理解触发器的功能,掌握使用触发器的操作技巧和方法;

二、 实验要求

1. 实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;

2. 能认真独立完成实验内容;

3. 实验后做好实验总结,根据实验情况完成总结报告。

三、 实训操作及流程分析

1、创建与执行存储过程

(1)用T-SQL语句创建存储过程

可以使用CREATE PROCEDURE语句来创建存储过程。 例9.1

在学生成绩库中创建一个名为sp_StuCourseInfo的存储过程,产生一个学生选

课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等。

分析:要产生一个学生选课情况列表,包含学号、姓名、性别、课程号、课程名、成绩、学分等字段信息,其Select语句如下:

SELECT tStudent.Sno as 学号, name as 姓名, age as 性别, Course.Cno as 课程号, Cname as 课程名, Grade as 成绩, Ccredit as 学分

FROM Student, SC, Course

WHERE Student.Sno = SC.Sno AND Course.Cno = SC.Cno 那么,完整的创建存储过程proc_8_2的T-SQL语句如下: CREATE PROCEDURE sp_StuCourseInfo AS

SELECT tStudent.Sno as 学号, name as 姓名, age as 性别, Course.Cno as 课程号, Cname as 课程名, Grade as 成绩, Ccredit as 学分

FROM Student, SC, Course

WHERE Student.Sno = SC.Sno AND Course.Cno = SC.Cno GO

上述T-SQL语句执行后,在学生成绩库中就存在了名为sp_StuCourseInfo的存储过程。 (2)用企业管理器创建存储过程

例9.2 用企业管理器实现例9.2所述存储过程的创建。 具体操作如下:

? 打开企业管理器,展开服务器组,展开服务器,展开“数据库”文件夹。再展开“学

生成绩库”,右击“存储过程”,如图1 用企业管理器创建存储过程。

? 单击“新建存储过程”命令,见图2新建存储过程过程窗口。

? 在该窗口的文本框中,编写存储过程的语句。如图3编写存储过程语句。 ? 单击“确定”命令。可以看到在企业管理器中,已存在名为proc_8_3的存储过程。

图1 用企业管理器创建存储过程

图2 新建存储过程窗口

图3 编写存储过程语句

存储过程创建后,可以通过在查询分析器的查询窗口中键入存储过程名来执行,也可以使用EXECUTE语句来执行存储过程。

(3)指定参数

存储过程通过其参数与调用程序通讯。当程序执行存储过程时,可通过存储过程的参数向该存储过程传递值。这些值可作为Transact-SQL编程语言中的标准变量使用。存储过程也可通过 OUTPUT 参数将值返回至调用程序。一个存储过程可有多达2100个参数,每个参数都有名称、数据类型、方向和默认值。

例9.3 在学生成绩库中创建一个名为sp_CourseInfo的存储过程,产生某门课程的选课学生情况列表,其中包括课程号、课程名、学号、姓名、系别、性别等。要求输入某门课程的课程号,得到上述信息。

分析:根据题意,需要在存储过程中使用参数,然后通过参数实现向存储过程传递值,得到所需的信息。

完整的T-SQL语句如下:

CREATE PROCEDURE sp_CourseInfo

@cno nvarchar(10) --@cno是参数,字符型,表示某门课的课程号 AS

SELECT Course.Cno,Course.Cname,Student.Sno,Student.Name,Student.Dept,Student.Age FROM Course,SC,Student

WHERE Course.Cno=SC.Cno and Student.Sno=SC.Sno AND Course.Cno = @cno GO

在查询分析器的查询窗口中输入上述T-SQL语句,执行后,即在“Student”中创建了存储过程sp_CourseInfo。

如果要产生课程号为“0001”的课程的选课学生情况列表,可以调用已创建的存储过程

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4