
一、本实验课在培养实验能力中的地位及作用
数据库技术是一个理论和实际紧密联系的技术,而SQL server2000则是数据库具体应用的一个数据库开发系统。在学习过程中,除了解SQL server系统的设计环境及各种工具的使用方法、数据库系统结构、数据库应用方法等知识外,通过实验对相关技术加深认识,切实加强学生的实践能力,是教学中一个重要且必要的环节。并为其它信息系统专业课程奠定基础。《SQL server2000》是一门实践性很强的课程,只有通过上机实践才能真正领会主教材中介绍的知识。
二、应达到的实验能力标准
本实验的教学目标是使学生掌握如何使用SQL server2000 数据库开发系统,了解数据库设计及相关操作的基本概念与方法,进而学会建立与组织、操作数据库。上机实验的主要目标如下:
(1)通过上机操作,加深对数据库系统理论知识的理解。
(2)通过使用具体的DBMS,了解一种实际的数据库管理系统并掌握其操作技术。
(3)通过上机实验,提高动手能力,提高分析问题和解决问题的能力。
三、实验主要内容
试验一 SQL server2000的安装及SQL server2000常用工具的使用
(学时 4)
要求:掌握SQL server2000的安装方法
掌握SQL server2000常用工具的使用方法
试验二 数据库及表的创建和管理
(学时 4)
要求:掌握SQL server2000数据库的创建及使用方法
掌握SQL server2000数据库的创建使用方法
试验三 约束的创建及使用
(学时 2)
要求: 能用T—SQL语言及企业管理器创建约束
试验四 表中数据的查询及维护
(学时 4)
要求:掌握表中数据的查询方法及操作方法
试验五Transact—SQL程序设计
(学时 2)
要求:掌握Transact—SQL程序设计的方法
要求:掌握用户自定义函数的创建方法
试验六 SQL Server视图及索引的创建及使用
(学时 4)
要求:掌握视图的创建及调用
掌握索引的创建及调用
试验七 SQL Server 的存储过程
(学时 4)
要求:掌握存储过程的创建及调用
试验八 SQL Server 的触发器
(学时 4)
要求:学会触发器的创建及使用
试验九 SQL Server的安全性管理及代理服务
(学时 4)
要求:通过实验理解SQL Server的安全性管理及代理服务
试验十 数据库的备份及恢复
(学时 2)
要求:学会如何备份及恢复数据库
实验十一 SQL Server数据转换
(学时 4)
要求:掌握数据的导入\\导出及DTS设计器的使用
四、实验成绩考核方法
实验成绩在课程总成绩中占20%,每次实验以百分记分,完成实验内容达到实验目的为100分,完成实验内容但对实验内容理解不清为60分,其他情况酌情定分。最后计算平均分并乘以0.2加入总分中。
五、实验教材、参考资料
1. 《SQL Server学习与上机实验指导》李春葆 等 清华大学出版社
2. 《SQL SERVER数据库设计与应用案例训练教程》 魏茂林等 电子工业出版社
3. 《SQL Server数据库应用系统开发技术实验指导及习题解答》 朱如龙等编著 机械工业出版社
六、实验项目汇总表
| 序号 | 内容 | 实验学时 |
| 实验一 | SQL server2000的安装及SQL server2000常用工具的使用 | 4 |
| 实验二 | 数据库及表的创建和管理 | 4 |
| 实验三 | 约束的创建及使用 | 2 |
| 实验四 | 表中数据的查询及维护 | 4 |
| 实验五 | Transact—SQL程序设计 | 2 |
| 实验六 | SQL Server视图及索引的创建及使用 | 4 |
| 实验七 | SQL Server 的存储过程 | 4 |
| 实验八 | SQL Server 的触发器 | 4 |
| 实验九 | SQL Server的安全性管理及代理服务 | 4 |
| 实验十 | 数据库的备份及恢复 | 2 |
| 实验十一 | SQL Server数据转换 | 4 |
上机实验一
1.练习安装SQL SERVER 2000及卸载SQL SERVER 2000。
2. 管理器创建一个新的SQL Server服务器组,作为Microsoft SQL Servers的子对象,名称为 “NewGroup”
3. 在计算机上再安装一个SQL Server命名实例,实例名为 “people”。 使用企业管理器在NewGroup服务器组下创建一个新的SQL Server注册,使她连接people实例。
上机实验二
1.使用企业管理器创建名为student的数据库,并设置数据库主文件名为syudent_data,大小为10MB;日志文件为student_log,大小为2MB.其他参数取默认值。
步骤:a.
b.
c.
d.
2. 使用Transact—SQL语言创建一个student1数据库,主文件逻辑名为student1_data,物理文件名为student1.mdf,为10MB,增长速度为10%;数据库的日志文件逻辑名为syudent1_log, 物理文件名为student1.ldf,初始化大小为1MB,最大尺寸为5MB, 增长速度为1 MB;文件存放路径为c:\\data文件夹下。
Create database student1
On primry
(name=student1_data,
filename=c:\\data\\student1.mdf,
size=10,
maxsize=unlimited,
filegrowth=10%)
log on
(name=student1_log,
filename=c:\\data\\student1.ldf,
size=1,
maxsize=5,
filegrowth=1)
3.在student数据库中创建一个名为pupil的表,要求:
(sno char(6) not null,sname char(10) not null,ssex char(2) not null,birthday datetime not null, polity char(20))
步骤:
a.
b.
c.
保存并命名为pupil即可。
上机实验三
1.将pupil表的sno设置为主键。
2.为sname字段设置惟一性约束。
步骤:
3.为ssex和birthday设置检查性约束,要求ssex只能为‘男’或‘女’,birthday应该大于‘1987-1-1’。
步骤:
4.
为polity字段设置默认约束,值为‘群众’。
5.再创建一个学生选课表sc(sno char(6) not null,cno char(10) not null,grade real).
为sc表创建外键约束,把sc表的sno和pupil表的sno关联起来,在这两个表之间创建一种制约关系。
步骤:
最后保存该关系图即可。
上机实验四
1. 已知一个名为pupil的表:
(sno char(6) not null,sname char(10) not null,ssex char(2) not null,birthday datetime not null, polity char(20),sdept char(20) not null)
a.利用insert语句向其中插入一条新的记录:
(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,’计算机系’)
insert into pupil
values(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,‘计算机系’)
b.利用update语句将编号为‘0004’的学生polity改为‘党员’:
update pupil
set polity=’党员’
where sno=’0004’
a.利用delete语句将‘186-1-1’以后出生的女同学记录删除。
Delete from pupil
Where polity>1986-1-1 and ssex=’女’
2.针对pupil、sc、course三张表完成以下查询:
a.查询所有学生的基本信息,并按出生日期升序排列
select * from pupil order by polity
b.查询女同学的信息和女同学的人数
select * from pupil where ssex=’女’
compute count(sno)
c.查询所有男同学的年龄
select year(getdate())-year(birthday) as 年龄 from pupil
d.所有选课学生的姓名、选修课程名及成绩
select sname,cname,grade
from pupil,sc,course
where pupil.sno=sc.sno and course.cno=sc.cno
e.不及格学生的姓名
select distinct sname
from pupil,sc,course
where pupil.sno=sc.sno and course.cno=sc.cno and grade<60
f.查询‘刘’姓学生的信息
select * from pupil where sname like ‘刘%’
g.查询polity为’团员’或’党员’的学生信息
select * from pupil where polity in(‘团员’,’ 党员’)
h.查询各门课程的选课人数
select cno ,count(sno) from sc group by cno
i.查询缺少成绩的学生的学号及课程号
select sno,cno from sc where grade is null
j.查询与‘刘成’同一个系的学生情况
select * from pupil where sdept in(select sdept from pupil where sname=’ 刘成’))
k.查询选修了课程名为‘MIS’的学生的学号和姓名
select sno,sname from pupil where sno in(select sno from sc where cno in(select cno from course wnere cname=’MIS’))
上机实验五
1.编写一个用户自定义函数fun_avggrade,要求根据输入的班级号和课程号,求此班级此课程的平均分。
Create function fun_avggrade
(@classnumber as char(10),@coursenumber as char(10))
returns real
begin
declare @avgresult
select @avgresult=avg(grade)
from sc
where substring(sno,1,len(sno)-2)= @classnumber and cno=@coursenumber
return @avgresult
end
2. 编写一个用户自定义函数,完成以下功能:根据两个
输入参数(成绩上限和成绩下限),求sc数据表中满足输
入条件的学生人数。
Create function fun_sumren
(@maxline real,@minline real)
returns int
begin
declare @personcount as int
select @personcount=(select count(distinct sno) from sc)
from sc
where grade<=@maxline real and grade>=@minline
return @personcount
end
上机实验六
1.如何通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除?
通过企业管理器:
创建步骤:
最后保存该视图即可。
修改步骤:
进入该界面重新修改该视图即可。
删除步骤:
通过Transact_SQL语句:
创建:create view 视图名
[with encryption]
as select_statement
[with check option]
修改:利用 alter view 视图名
删除:利用 drop view 视图名
2.
通过Transact_SQL语句创建一个视图,计算各个班级的各门课程的平均分。
Create view v_avggrade
As
Select substring(pupil.sno,1,len(pupil.sno)-2) as 班级,
Cname as 课程名称,
Avg(grade) as 平均分
From pupil,sc,grade
Where pupil.sno=sc.sno and sc.cno=course.cno
Group by substring(pupil.sno,1,len(pupil.sno)-2), Cname
3. 通过Transact_SQL语句创建一个视图,显示‘高等数学’未过的学生的信息。
Create view v_gradenotpass
As
Select pupil.sno,sname,cname,grade
From pupil,sc,course
Where pupil.sno=sc.sno and sc.cno=course.cno and grade<60
And cname=’ 高等数学’
4.
通过Transact_SQL语句创建一个视图,查询的数据为99521班学生的考试成绩。
Create view v_grade99521
As
Select pupil.sno,sname,cname,grade
From pupil,sc,course
Where pupil.sno=sc.sno and sc.cno=course.cno and
left(pupil.sno,5)=’99521’
5.如何通过企业管理器创建索引?
步骤:
点击‘新建’按钮
点击‘确定’
点击‘关闭’
6.
如何删除索引?
选中该索引点击‘删除’即可
或
利用 drop index 表名. 索引名完成删除
上机实验七
1.创建一个存储过程stugradeinfo,查询班级、学号、姓名、性别、课程名称、分数
create procedure stugradeinfo
as
select 班级=substring(pupil.sno,1,len(pupil.sno)-2),
pupil.sno as 学号,
sname as 姓名,
ssex as 性别,
cname as课程名称,
grade as 分数
from pupil,sc,course
where pupil.sno=sc.sno and course.cno=sc.cno
2.利用企业管理器创建一个存储过程stu_info,根据传入的编号,查询某学生的基本信息。
代码如下:
create procedure stu_info
@stunum char(10)
as
if not exists(select * from pupil where sno=@stunum)
print ‘查无此人’
else
begin
select sno as 编号,
sname as 姓名,
ssex as 性别,
birthday as 出生日期,
polity as 政治面貌
from pupil
where sno=@stunum
end
3.创建一个存储过程stu_age,根据输入的学生姓名,计算该学生的年龄。
Create procedure stu_age
@stuname char(10)
as
if not exists(select * from pupil where sname=@stuname)
print ‘查无此人’
else
begin
declare @age int
select @age=floor(datediff(day,birthday,getdate())/365)
from pupil
where sname=@stuname
end
4.
创建一个存储过程stu_grade,根据输入的学生编号,返回其选课及其成绩。
Create procedure stu_grade
@stunum char(10)
if not exists(select * from pupil where sname=@stuname)
print ‘查无此人’
else
begin
if not exists(select * from pupil,sc where pupil.sno=sc.sno)
print ‘无此学生的选课信息’
else
select sname,cname,grade
from pupil,course,sc
where pupil.sno=sc.sno and course=cno=sc.cno
end
上机实验八
1.创建一个insert触发器,当在pupil表中插入一条新记录时,给出‘你已经插入了一条新记录’的提示信息。
步骤:
程序代码如下:
create trigger stuinsert on pupil
for insert
as
declare @msg char(50)
set @msg=’ 你已经插入了一条新记录’
print @msg
2.创建一个insert触发器,当在pupil表中插入一条新记录时,不允许在学号中出现重复的编号或出现空值。
程序代码如下:
create trigger stuinsert1 on pupil
for insert
as
declare @stunum char(10)
set @stunum=(select sno from inserted )
if @stunum is null
begin
print ‘学号不能为空’
rollback transaction
end
else
begin
declare @num int
set @num=(select count(*) from pupil where sno in (select sno from inserted))
if @num>1
begin
print ‘已经有相同的学号,请重新确认’
rollback transaction
end
else
print ‘数据录入成功’
end
3.创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。
程序代码如下:
create trigger scinsert on sc
for insert
as
declare @gradevalue real
set @gradevalue=(select grade from inserted)
print ‘触发器开始工作………………’
if not exists(select sno from inserted
where sno in(select sno from pupil))
begin
print ‘无此学生的编号,请重新确认’
rollback transaction
end
else
begin
if not exists(select cno from inserted where cno in(select cno from course))
begin
print ‘无此课程的编号,请重新确认’
rollback transaction
end
else
begin
if @gradevalue<0 or @gradevalue>100
begin
print ‘分数有误,请重新确认’
rollback transaction
end
else
print ‘数据插入成功’
end
end
4.创建一个after触发器,在pupil表中删除某学生的记录时,删除其相应的选课记录。
程序代码如下:
create trigger studelete on pupil
for delete
as
declare @stunum char(10)
select @stunum=sno from deleted
if not exists(select * from pupil,sc
where pupil.sno=sc.sno and pupil.sno=@stunum)
print ‘无此学生的选课记录’
else
begin
print ‘开始查找并删除该学生相映的选课记录……..‘
delete from sc where sno=@stunum
print ‘该学生的选课记录已经删除’
end
5.创建一个instead of 触发器,当在course表中上出记录时,不允许删除course表中的数据。
程序代码如下:
create trigger notallowdelete
on course
instead of delete
as
print ‘instead of触发器开始工作……………’
print ‘course表中的数据不允许删除不能执行删除操作!!’
上机实验九
1.使用企业管理器和Transact_SQL语句管理登录帐户
2.使用企业管理器和Transact_SQL语句管理数据库用户
3.使用企业管理器和Transact_SQL语句管理服务器角色和数据库角色
4.使用企业管理器和Transact_SQL语句管理语句权限和对象权限
5. 练习创建一个作业。
6. 练习创建一个警报。
上机实验十
1.创建一个备份设备。
2.
使用企业管理器对一数据库做一次完全数据备份。
3.
使用企业管理器恢复某一数据库的完全数据备份
上机实验十一
1.导入一个文本文件到SQL Server数据库当中。
2.将SQL Server数据库当中的表导出到access数据库当中。
3.
利用DTS设计器将表从一个数据库复制到另一个数据库当中
