20131120298-王定晓-实验三

更新时间:2023-12-29 22:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

云南大学软件学院

实 验 报 告

课程: 数据库原理与实用技术 任课教师: 蔡莉 实验指导教师(签名): 学号:20131120298 姓名: 王定晓 专业: 软件工程 日期: 2013/4/18 成绩:

SQL Server 实验3 存储过程和触发器的使用

一、实验目的

(1)掌握创建和执行存储过程的方法。 (2)掌握创建和执行触发器的方法

二、实验内容

注意:使用第二次实验中所创建的“Students”数据库来完成本实验。

1、使用不带参数的存储过程

(1)创建一个存储过程my_proc,查询“学生表”中所有计算机系女生的学号、姓名、性别、年龄和所在院系。

CREATE PROC my_proc AS select 学号,姓名,性别,所在院系 FROM 学生表 WHERE 性别='女' AND 所在院系='计算机' (2)执行存储过程

exec my_proc

(3)修改存储过程,使其能够查询计算机系女生的所有基本信息 ALTER proc my_proc

AS select * FROM 学生表

WHERE 性别='女' AND 所在院系='计算机'

2、带输入参数的存储过程

(1)创建一个存储过程my_procgender,使其能够查询“学生表”中男学生或女学生的学号、姓名、性别、年龄和所在院系

1

CREATE proc my_procgender @gender varchar(2) AS select 学号,姓名,性别,年龄,所在院系 FROM 学生表 WHERE 性别=@gender (2)执行存储过程

3、带输入/输出参数的存储过程

(1)创建一个存储过程my_procclass,使其能够根据学生姓名,查询学生所在班级。不存在时给出提示信息)

CREATE proc my_procclass @name varchar(10),@age int OUTPUT AS IF EXISTS(select 年龄 from 学生表 where 姓名=@name) BEGIN SELECT @age=年龄 FROM 学生表 where 姓名=@name return -100 END ELSE return -101

(2)执行存储过程

declare @a int declare @b int exec @b=my_procclass @name='肖竹',@age=@a OUTPUT print '返回值:'+convert(varchar(10),@b) IF(@b=-100) BEGIN 2

(考虑当学生print '年龄:'+convert(varchar(10),@a) END ELSE print '未找到' 4、返回状态值的存储过程

(1)创建一个存储过程my_procstatus,使其能够根据学生学号,查询学生的选课信息。(如果没有输入学生学号,返回状态码55;如果输入的学生学号不存在,则返回状态码-155) create proc my_procstatus @name varchar(10),@course varchar(10) output as if @name='' return 55 else begin if not exists(select * from 学生表 where 姓名=@name) return -155 else select @course=课程名 from 课程表 where 课程号 in (select 课程号 from 成绩表 where 学号 in (select 学号 from 学生表 where 姓名=@name))

end

(2)执行存储过程:接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入学号!!”;如果返回的状态码为-155,则输出“没找到!!”。 declare @a int declare @c varchar(10) exec @a=my_procstatus @num=, @course=@c output if @a=55 print'没有输入学号' else begin if @a=-155 print '没找到或未选课' else print '该学生选了'+convert(varchar(10),@c) end (3)删除存储过程

drop proc my_procstatus

5、在成绩表中创建一个触发器。

(1)修改成绩表,新增一个“备注”列,数据类型为char(10),给出修改的SQL语句。 alter table 成绩表 add 备注 char(10)

(2)在成绩表中创建一个名为mytrigger的触发器,当对该表录入成绩信息或修改成绩列时,如果分数小于60分,则将备注列的内容写为“不及格”。给出创建触发器的SQL语句。 CREATE TRIGGER mytrigger

3

ON 成绩表 FOR Insert,Update AS IF EXISTS(select 成绩 from 成绩表 where 成绩<60) UPDATE 成绩表 set 备注 = '不及格' where 学号 in (select 成绩 from 成绩表 where 成绩<60) return

(3)给出运行该触发器的一个SQL语句。

UPDATE 成绩表 set 成绩 = 55 where 学号 = 20023001

4

本文来源:https://www.bwwdw.com/article/4gex.html

Top