tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> 学科竞赛 >>

实验四 (2)


实验四
一、实验目的与要求 1、熟悉存储过程、触发器的语法格式。 2、掌握存储过程、触发器的应用 二、实验平台 1、操作系统:Windows XP 或 Windows 2003 2、数据库管理系统:SQL Server 2005
三、实验内容

一、触发器实验 1、设计一个简单的 AFTER INSERT 触发器,这个触发器的作用是:在插入一条记 录的时候,发出“又添加了一个学生的成绩”的友好提示。
CREATE TRIGGER score_insert ON score AFTER INSERT AS BEGIN PRINT '又添加了一个学生的成绩' END GO

2、在 score 表上创建一个 instead of insert 触发器,实现:当向表 score 插 入记录时检查分数的合理性,如果不合理就不进行插入操作,否则允许。
create trigger score_insert_instead on score instead of insert as begin declare @sno char(9),@cno int,@grade int select @sno=sno,@cno=cno,@grade=grade from inserted if( @grade<0 or @grade>100) print '分数不合理' else insert into score values( @sno,@cno,@grade) end

二、存储过程实验 实验数据库 学生课程(test)数据库 统计离散数学的成绩分布情况,即按照各分数段统计人数;
create table 成绩分布表 (

分数段char(30), 人数int ) create proc proc_gfn as declare @less60 int,@60t70 int,@70t80 int,@80t90 int,@more90 int declare @cno int begin select @cno =课程编号 from 课程信息 where 课程名称= '离散数学' select @less60 = count(*) from 选课表 where 课程编号=@cno and 成绩<60 select @60t70 = count(*) from 选课表 where 课程编号=@cno and 成绩between 60 and 69 select @70t80 = count(*) from 选课表 where 课程编号=@cno and 成绩between 70 and 79 select @80t90 = count(*) from 选课表 where 课程编号=@cno and 成绩between 80 and 99 select @more90 = count(*) from 选课表 where 课程编号=@cno and 成绩>=90 insert into 成绩分布表values('[0,60)',@less60) insert into 成绩分布表values('[60,70)',@60t70) insert into 成绩分布表values('[70,80)',@70t80) insert into 成绩分布表values('[80,90)',@80t90)

insert into 成绩分布表values('[90,100]',@more90) end exec proc_gfn

方法 2: create proc proc_gradefb as declare @stuNm int select @stuNm = count(*) from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= '教育教学调查' and 选课表.成绩between 0 and 59 print '教育教学调查:0~60:' print '人数为:'+convert(varchar(5),@stuNm) select @stuNm = count(*) from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= '教育教学调查' and 选课表.成绩between 60 and 69 print '教育教学调查:60~70:' print '人数为:'+convert(varchar(5),@stuNm) select @stuNm = count(*) from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= '教育教学调查' and 选课表.成绩between 70 and 79 print '教育教学调查:70~80:' print '人数为:'+convert(varchar(5),@stuNm) select @stuNm = count(*) from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= '教育教学调查' and 选课表.成绩between 80 and 99 print '教育教学调查:80~90:' print '人数为:'+convert(varchar(5),@stuNm) select @stuNm = count(*) from 课程信息,选课表

where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= '教育教学调查' and 选课表.成绩>=90 print '教育教学调查:90~100:' print '人数为:'+convert(varchar(5),@stuNm)

4)统计任意一门课的平均成绩。
create proc proc_avgGrage @courseNm char(40) as begin select 课程名称,avg(成绩)平均成绩 from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 and 课程信息.课程名称= @courseNm group by 课程信息.课程名称 end exec proc_avgGrage '政治经济学(A)(注)' 方法2: create table avgGrade ( courseNm char(40), courseAvg numeric(10,6) ) create proc collect_avggrade as declare @cname char(40) declare @avggrade numeric(10,6) declare mycuravg cursor for select 课程名称,avg(成绩) from 课程信息,选课表 where 课程信息.课程编号= 选课表.课程编号 group by 课程信息.课程名称 begin open mycuravg fetch next from mycuravg into @cname,@avggrade while @@fetch_status = 0 begin insert into avgGrade values(@cname,@avggrade)

fetch next from mycuravg into @cname,@avggrade end close mycuravg end exec collect_avggrade select * from avgGrade

5)将学生选课成绩从百分制改为等级制(即 A、B、C、D、E);
alter table 选课表add grade varchar(2) create proc change_grade as update 选课表 set where grade='A' 成绩>=90 and 成绩<100

update 选课表 set where grade='B' 成绩>=80 and 成绩<90

update 选课表 set where grade='C' 成绩>=70 and 成绩<80

update 选课表 set where grade='D' 成绩>=60 and 成绩<70

update 选课表 set where grade='E' 成绩<60

exec change_grade

alter table 选课表drop column 成绩 select * from 选课表 -------------alter table 选课表add newgrade varchar(2) create proc change_grade2 as declare @chgrade char(2) declare @curgrade int declare mycursor cursor for select 成绩 from 选课表 begin open mycursor fetch mycursor into @curgrade while @@fetch_status =0 begin if @curgrade <60 set @chgrade = 'E'; else if @curgrade<70 set @chgrade = 'D'; else if @curgrade < 80 set @chgrade = 'C'; else if @curgrade <90 set @chgrade = 'B'; else set @chgrade = 'A'; update 选课表set newgrade = @chgrade where 成绩= @curgrade fetch mycursor into @curgrade end close mycursor end

要求:提交源程序并标识必要的注释。保证程序能正确编译和运行,认真填 写实验报告。

1、


推荐相关:

实验四 (2).doc

实验四 (2) - 实验四 图的操作及应用 实验课程名: 数据结构与算法 专业班

(实验四)2.doc

(实验四)2 - 丽水学院计算机实验报告 课程名称 实验时数 指导老师 学生姓名 同组成员 路由与交换 技术 2 王国豪 毛文女 实验项目名称 实验类型 实验地点 (包...

实验四控件(2) (1)_图文.doc

实验四控件(2) (1) - 实验四控件 一、实验目的及任务 1、 Activi

数学实验四(概率论) (2).doc

数学实验四(概率论) (2) - 数学实验四(概率论) 一.用 MATLAB 计

实验四 jQuery的使用 (2).doc

2. 3. 4. jQuery 的使用 掌握 jQuery 的引用 掌握 jQuery 常用的选择器 掌握了 jQuery 事件处理的常用事件 掌握 jQuery 基本程序的编写; 实验要求按要求...

实验四、白盒测试技术(二).doc

实验四、白盒测试技术(二) - 实验四、白盒测试技术(二) 一、 实验类型 实验

实验四 链路状态路由协议 (2).doc

实验四 链路状态路由协议 (2) - 实验十三 链路状态路由协议 OSPF 协议

实验四、进程通信(二) 消息通信.doc

实验四、进程通信(二) 消息通信 - 1) 加深对管道通信的了解 2) 掌握

数学实验四(概率论)_2.doc

数学实验四(概率论)_2 - 数学实验四(概率论) 一.用 MATLAB 计算随

数学实验四(概率论)_2.doc

数学实验四(概率论)_2 - 数学实验四(概率论) 一.用 MATLAB 计算随

实验四(2)选择程序设计.doc

实验四(2)选择程序设计_计算机软件及应用_IT/计算机_专业资料。实验四 选择

实验四 类和对象(二).doc

实验四 类和对象(二)_计算机软件及应用_IT/计算机_专业资料。湖北工业大学工

实验四 类和对象(二).doc

课程名称: 面向对象程序设计 学院: 姓名: 实验日期: 一、实验目的 专业班级: 学号: 指导教师: 实验内容: 实验四 类和对象(二) 实验地点: 1、掌握对象数组及...

实验四(2)答案.doc

实验四(2)答案 - 上海电力学院 实验报告 课程名称 姓名 同组人姓名 一、实

实验四 (2).doc

实验四 (2) - 实验四:液相色谱法用于不易挥发有机化合物混合物的定性分析 颜

实验四 (2).doc

实验四 (2) - 实验四 一、目的和要求 类与对象 1. 掌握类、对象的基本概

实验四 二输入与门_图文.ppt

实验四 输入与门 - 实验四 输入与非门的VHDL设计 一、任务分析 任务描述 用VHDL设计实现一个输入与非门。输入与非 门是常用的门电路之一,其逻辑表达式...

ch7.2 实验四 作业2.._图文.ppt

ch7.2 实验四 作业2.._职业技术培训_职业教育_教育专区。ch7.2 第

实验四 STRUTS2综合实验_图文.pdf

实验四 Struts2 综合实验实验目的: 1. 正确使用组件结构,在业务控制器

c#实验四 (2).doc

(4)计算一元次方程ax +bx+c=0的实根和复根: using Syste

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com