《网络数据库技术技术与应用》课程
课程编号:433011
实 验 指 导 书
主撰人:
王志和
审核人:
陈 刚
经济与管理科学系
电子商务教研室
二○一二年五月
目 录
前 言
1
实验1
熟悉Java编程环境和Java程序结构实验
2
实验2
Java基本语法实验
实验3
面向对象编程实验
实验4
数组与字符串实验
实验5
异常处理机制实验
实验6
多线程实验
实验7
输入流/输出流类实验
实验8
图形用户界面及applet实验
实验9
网络编程实验
前 言
实验总体目标:
《网络数据库技术与应用》是电子商务专业的专业必修课程。课程内容主要包括:数据模型、关系代数、关系数据库标准语言SQL、关系数据理论、数据库设计与编程、关系查询处理和查询优化和数据库的恢复与并发技术。学习本课程的上机实验,使学生真正深层次了解数据库系统的体系结构,掌握数据库系统的基础理论、技术和方法,掌握主流数据库管理系统SQL Server的应用技术及数据库应用系统的设计、开发能力。
适用专业年级:
电子商务专业第四学期
实验课时分配:
16学时
序号
实验项目
要求
类型
每组人数
实验
学时
1
常用数据库管理工具的使用
必
验证
1
2
2
数据库的管理和表操作
必
设计
1
2
3
SQL数据操作与查询
必
验证
1
4
4
Transact-SQL数据库编程
必
设计
1
4
5
数据库的管理与维护
必
验证
1
2
6
数据库应用开发
必
设计
1
4
9
网络编程实验
必
设计
1
4
实验环境
Windows 2003,Microsoft SQL Server 2005。
实验总体要求
通过本实验课程的教学,学生能基本上达到独立完成实验内容,通过老师的指导可完成设计性实验内容,能将相关内容应用到课程设计、毕业设计等实践性环节中。
实验1 常用数据库管理工具的使用
一、实验目的
1.理解服务的概念,掌握SQL Server服务的启动、暂停和停止。
2.熟悉SQL Server数据库结构,掌握企业管理器的基本操作。
3.理解查询分析器的作用,掌握查询分析器的常用用法。
4.掌握联机丛书的用法。
二、实验内容与步骤
1、服务管理器的用法
SQL Server 是作为Windows 网络操作系统的一个服务运行的。通过设置,可以在启动操作系统时自动启动SQL Server,也可以远程启动和停止SQL Server。可以使用下列工具手工启动、暂停和停止SQL Server服务:
· SQL Server企业管理器
· SQL Server服务管理器
· 控制面板中的“服务”
在命令提示符中使用net命令
net pause mssqlserver
net continue mssqlserver
net stop mssqlserver
其中,服务管理器是最常用的图形界面工具。
实验要求1:使用SQL Server服务管理器查看SQL Server服务是否正在运行,若正在运行,将其停止。
实验要求2:使用控制面板中的“服务”管理控制台将已停止的SQL Server服务启动。
2、企业管理器的使用
企业管理器是SQL Server提供的最主要的数据库管理图形界面工具,它以树形结构来组织数据库服务器、数据库和数据库中的对象,大部分的数据库管理工作都可以使用它来完成。
实验要求3:启动企业管理器,查看SQL Server的注册属性。
提示:启动企业管理器后,在控制台树中,展开“Microsoft SQL Servers”,然后展开“SQL Server组”,右击自己的服务器名,然后单击“编辑SQL Server注册属性”。
实验要求4:在企业管理器中,查看Northwind数据库中用户数据表和系统数据表各有多少个?13,19
3、查询分析器的使用
查询分析器是图形化的数据库编程接口,用户可以以自由的文本格式编辑、调试和执行SQL脚本。
实验要求5:在查询分析器中,使用SQL语句在master数据库中查询sysobjects表的所有信息。
提示:首先,启动查询分析器,在查询分析器的查询窗口中输入如下的SQL语句:
select * from sysobjects
然后,单击工具栏中的“执行查询”按钮。
实验要求6:在查询分析器中,使用SQL语句查询Northwind数据库中的Employees表的所有信息。
select * from Northwind..Employees
4、联机丛书的使用
联机丛书中包含所有SQL Server2000的使用说明。在本课程的学习中,各位同学应该掌握联机丛书的使用。
实验要求7:打开联机丛书,在目录中展开“安装SQL Server”,查看有关SQL Server 2000 的硬件和软件安装要求。
实验要求8:打开联机丛书,在索引中查找有关sp_help存储过程的帮助信息。
四、思考题
可以在一台计算机中注册多个命名实例和服务器,现在若需要将18号机器的SQL Server服务注册到本地企业管理器中来,应该怎么做?
实验2 数据库的管理和表操作
一、实验目的
1.掌握使用企业管理器和T-SQL语言创建SQL Server数据库的方法。
2.掌握附加和分离数据库的方法。
3.掌握使用企业管理器或存储过程查看SQL数据库属性的方法。
4.熟悉数据库的收缩、更名和删除。
5.掌握使用企业管理器或sp_dboption存储过程修改数据库选项的方法。
6.掌握使用企业管理器和T-SQL语句创建表、修改表的结构。
7.掌握使用企业管理器和T-SQL语句实现对数据的操作。
二、实验内容与步骤
1、使用向导创建数据库
实验内容1:创建一个名为TestData0的数据库,数据文件的初始大小设为20MB,文件增长增量设为5MB,文件增长方式设为自动增长,文件的增长上限设为500MB;日志文件的初始大小为20MB,文件增长增量设为1MB,文件的增长限制设为100MB。
CREATE DATABASE TestData0
ON
( NAME = TestData0,
FILENAME ='d:\TestDB\TestData0.mdf',
SIZE = 20,
MAXSIZE = 500,
FILEGROWTH = 5 )
LOG ON
( NAME =TestLog0,
FILENAME = 'd:\TestDB\TestLog0.ldf',
SIZE = 20,
MAXSIZE = 100,
FILEGROWTH = 1 )
2、用企业管理器创建数据库
实验内容2:使用SQL Server企业管理器创建一个数据库,具体要求如下:
(数据库名称为Test。
(主要数据文件:逻辑文件名为TestData1,物理文件名为TestData1.mdf,初始容量为1MB,最大容量为10MB,递增量为1MB。
(次要数据文件:逻辑文件名为TestData2,物理文件名为TestData2.ndf,初始容量为1MB,最大容量为10MB,递增量为1MB。
(事务日志文件:逻辑文件名为TestLog1,物理文件名为TestLog1.ldf,初始容量为1MB,大容量为5MB,递增量为512KB。
CREATE DATABASE Test
ON
( NAME = TestData1,
FILENAME ='d:\TestDB\TestData1.mdf',
SIZE = 1,
MAXSIZE = 10,
FILEGROWTH = 1 ),
( NAME = TestData2,
FILENAME ='d:\TestDB\TestData2.ndf',
SIZE = 1,
MAXSIZE = 10,
FILEGROWTH = 1 )
LOG ON
( NAME =TestLog1,
FILENAME = 'd:\TestDB\TestLog1.ldf',
SIZE = 1,
MAXSIZE = 5,
FILEGROWTH = 512KB )
3、用T-SQL语言创建数据库
实验内容3:使用查询分析器新建一个数据库,名称为“图书”,其主要数据文件大小为2M,最大文件大小为10M,每次增长2M;次要数据文件大小为1M;日志文件大小为1M;三个文件的文件名自定,上述没有说明的选项都采用默认值。
提示:在查询分析器中输入如下SQL脚本:
CREATE DATABASE 图书
ON
( NAME = data1,
FILENAME = 'd:\TestDB\data1.mdf',
SIZE = 2,
MAXSIZE = 10,
FILEGROWTH = 2 ),
( NAME =data2,
FILENAME = 'd:\TestDB\data2.ndf',
SIZE = 1 )
LOG ON
( NAME =log,
FILENAME = 'd:\TestDB\log.ldf',
SIZE = 1 )
实验内容4:用T-SQL语句创建一个名为student的数据库,它由5MB的主数据文件、2MB的次数据文件和1MB的日志文件组成。并且主数据文件以2MB的增长速度增长,其最大容量为15MB;次数据文件以10%的增长速度增长,其最大容量为10MB;事务日志文件以1MB增长速度增长,其最大日志文件大小为10MB。提示:在查询分析器中输入如下SQL脚本:
CREATE DATABASE student
On
( name=student1,
filename= 'd:\TestDB\student_data1.mdf',
size=5,maxsize=15,filegrowth=2),
( name=student2,
filename='d:\TestDB\student_data2.ndf',
size=2,maxsize=10,filegrowth=10%)
log on
( name=student_log,
filename='d:\TestDB\student_log.ldf',
size=1,maxsize=10,filegrowth=1)
4、数据库的分离与附加
实验内容5:将“图书”数据库与服务器分离。可以使用企业管理器或SQL语言对数据库进行分离的操作。分离数据库的存储过程是sp_detach_db。
sp_detach_db 图书
实验内容6:将已分离的“图书”数据库附加到服务器上。可以使用企业管理器或SQL语言对数据库进行附加的操作。附加数据库的存储过程是sp_attach_db。
sp_attach_db 图书,
'd:\TestDB\student_data1.mdf',
'd:\TestDB\student_data2.ndf',
'd:\TestDB\student_log.ldf'
5、查看和修改数据库属性
可以使用企业管理器或SQL语言来查看或修改数据库的属性。使用企业管理器的方法是右击数据库名称,在快捷菜单中选择“属性”,然后数据库属性对话框中就可以查看或修改数据库的属性。也可以使用sp_helpdb、sp_spaceused、sp_helpfile和sp_helpfilegroup等存储过程查看和数据库有关的属性。修改数据库属性可以使用ALTER DATABASE命令。
实验内容7:使用sp_helpdb存储过程查看student数据库的信息,然后企业管理器将student数据库的事务日志文件的增长大小改为按1MB字节增长,再使用sp_helpdb存储过程查看student数据库的信息。
sp_helpdb student
实验内容8:使用ALTER DATABASE命令为student数据库添加一个新的数据文件,文件逻辑名为student_data3,初始大小为2MB,增长值为1MB,其他属性默认。
ALTER DATABASE student
ADD FILE
( name=student_data3,
filename='d:\TestDB\student_data3.ndf',
size=2,filegrowth=1)
ALTER DATABASE student
remove FILE student_data3
6、数据库的收缩
数据库收缩可以缩小数据库的空闲空间。可以使用企业管理器或SQL语言对数据库进行收缩工作。收缩数据库使用的SQL语言是DBCC SHRINKDATABASE命令。也可以使用ALTER DATABASE的SET子句或sp_dboption将数据库设为自动收缩。
DBCC SHRINKDATABASE(student)
实验内容9:将student数据库设为自动收缩。
sp_dboption N'student', N'autoshrink', N'true'
7、数据库的更名
更改数据库的名称应使用sp_renamedb存储过程。
实验内容10:将student数据库改名为stu。
sp_rename 'student', 'stu'
8、数据库选项的配置
可以使用 ALTER DATABASE 语句的 SET 子句、sp_dboption 系统存储过程,或者在某些情况下使用 SQL Server 企业管理器设置数据库选项。
实验内容11:使用企业管理器将stu数据库设为只读。
实验内容12:使用sp_dboption存储过程取消stu数据库的只读设置。
sp_dboption N'student', N'read only', N'true
9、数据库的删除
删除数据库可以使用企业管理器或DROP DATABASE命令。
实验内容13:使用DROP DATABASE命令将stu数据库删除。
DROP DATABASE stu
10、使用企业管理器按下表结构创建表
表名:Course
属性名称
属性描述
数据类型
字节数
空否
备注
CourseID
课程号
int
4
否
主键,标识列
CourseName
课程名称
varchar
20
否
Category
课程类别
char
8
Period
学时数
smallint
2
Credit
学分
tinyint
1
表名:ClassInfo
属性名称
属性描述
数据类型
字节数
空否
备注
ClassID
班级号
int
4
否
ClassName
班级名称
varchar
20
否
11、使用T-SQL语句按下表结构创建表
表名:Student
属性名称
属性描述
数据类型
字节数
空否
备注
StudentNum
学号
char
9
否
主键
StudentName
姓名
varchar
8
否
Sex
性别
bit
1
Birthday
出生日期
smalldatetime
4
ClassID
班级号
int
4
CREATE TABLE student
( StudentNum char(9) NOT NULL PRIMARY KEY,
StudentName varchar(8) NOT NULL,
Sex bit,
Birthday smalldatetime,
ClassID int
)
12、使用企业管理器修改表的结构
使用企业管理器将第1题所建立的Course表中的Category字段修改为varchar(20),为Period和Credit字段默认值为0。
13、使用T-SQL语句修改表的结构
使用T-SQL语句为Student表添加Nation(民族)字段和Stature(身高)字段,字段数据类型自定。
ALTER TABLE Student
ADD Nation varchar(8),Stature int
Drop column Nation,Stature
14、使用企业管理器实现对数据的操作
使用企业管理器按下表向Course添加数据。
课程号
课程名称
课程类别
学时数
学分
1
哲学
公共
36
2
2
实用
英语
关于好奇心的名言警句英语高中英语词汇下载高中英语词汇 下载英语衡水体下载小学英语关于形容词和副词的题
(1)
公共
72
3
3
实用英语(2)
公共
72
3
4
计算机应用基础
公共
102
5
5
C语言程序设计
专业基础
102
5
6
关系数据库技术基础
专业基础
102
5
四、思考题
1.一个数据库中包含哪几种文件?
2.事务日志文件的大小一般为数据文件大小的多少合适?
3.若需修改数据库文件的大小,可以使用的方法有哪些?若要求使用T-SQL语言,则命令应如何编写?
4.能不能删除master数据库?若一个用户数据库当前正在被访问,能不能被删除?
实验3 SQL数据操作与查询实验
一、实验目的
1.了解T-SQL语句的基本语法。
2.掌握基本的SELECT语句的设计和编写。
3.掌握多表查询的使用。
4.熟悉UNION子句的使用。
5.掌握GROUP BY子句的使用。
6.练习使用企业管理器、向导和查询分析器创建视图。
7.会使用视图、修改视图、查询视图的信息和删除视图。
8.进一步掌握使用T-SQL语句实现对数据的操作。
二、实验内容与步骤
利用上次实验所创建的student数据库进行实验。
1、使用T-SQL语句实现对数据的操作
(1)使用INSERT语句向Course表中添加记录:(计算机网络,专业基础,72,4)
insert Course(CourseName,Category,Period,Credit) values('计算机网络','专业基础','72','4')
(2)使用UPDATE语句将Course表中的“计算机应用基础”课的学时数改为106。
update Course set Period='106' where CourseName='计算机应用基础'
(3)使用DELETE语句将Course表中的公共课全部删除。
DELETE FROM Course where Category='公共'
2、使用T-SQL语句按下表结构创建表(在创建表时定义约束)
表名:Grade
属性名称
属性描述
数据类型
字节数
空否
约束
备注
StudentNum
学号
char
9
否
主键
CourseID
课程号
int
4
否
主键
DailyGrade
平时成绩
decimal
5,1
不小于0且不大于20
PracticeGrade
实践成绩
decimal
5,1
不小于0且不大于30
TestGrade
期末成绩
decimal
5,1
不小于0且不大于50
Grade
总评
由平时成绩(20%)、实践成绩(30%)和期末成绩(50%)计算而来
create table Grade
( StudentNum
char(9) not null,
CourseID
int not null,
DailyGrade
decimal(5,1),
PracticeGrade
decimal(5,1),
TestGrade
decimal(5,1),
Grade as DailyGrade*0.20+ PracticeGrade*0.30+ TestGrade*0.50
constraint pk_sc primary key(StudentNum,CourseID) ,
constraint ck_dg check(DailyGrade>0 and DailyGrade<20),
constraint ck_pg check(PracticeGrade>0 and PracticeGrade<30),
constraint ck_tg check(TestGrade>0 and TestGrade<50)
)
3、使用T-SQL语句修改表的结构
(1)为班级表ClassInfo添加入学时间EnrollDate字段,并定义入学时间不小于2001年9月1日。
alter table ClassInfo Add EnrollDate datetime,
check (EnrollDate >= '2001-9-1')
(2)为班级表ClassInfo定义主键约束,定义班级号ClassID为主键。
alter table ClassInfo add constraint pk_ClassInfo primary key(ClassID)
4、使用企业管理器定义约束
(1)为学生表Student定义外键约束,使ClassID参照班级表ClassInfo中的ClassID,并为约束设置级联更新。
(2)为班级表ClassInfo的ClassName定义唯一约束。
5、 默认值对象的创建与使用
(1)使用T-SQL语句创建名为DF_GRADE的默认值对象,值为0。
CREATE DEFAULT DF_GRADE AS 0
(2)使用企业管理器将DF_GRADE绑定到成绩表Grade中的DailyGrade、PracticeGrade和TestGrade字段上。
exec sp_bindefault DF_GRADE,'Grade.DailyGrade'
exec sp_bindefault DF_GRADE,'Grade.PracticeGrade'
exec sp_bindefault DF_GRADE,'Grade.TestGrade'
(3)使用sp_unbindefault存储过程将DF_GRADE从DailyGrade、PracticeGrade和TestGrade字段上解除。
exec sp_unbindefault 'Grade.DailyGrade'
exec sp_unbindefault 'Grade.PracticeGrade'
exec sp_unbindefault 'Grade.TestGrade'
(4)删除DF_GRADE默认值对象。
DROP DEFAULT DF_GRADE
在查询分析器在窗口下用SELECT语句完成单表查询:
5、SELECT语句的基本使用
① 查询学生基本信息表中的每个学生的所有数据。
Select * from stud_info
② 在学生基本信息表中查询每个学生的地址和电话。
Select address,telcode from stud_info
③ 查询学号为“0401010634”的学生的地址和电话。
Select address,telcode from stud_info where stud_id='0401010634'
④ 查询stud_info表中性别为“女”的学生的地址和电话。使用AS子句将结果中指定目标列的标题分别指定为地址,电话。
Select address as 地址,telcode as 电话 from stud_info where gender=N'女'
⑤ 查询计算机应用教研室“0101”的教师工资情况。
Select name,salary from teacher_info where jysh_id='0101'
⑥ 找出所有姓“王”的教师所对应的技术职称。
Select name,tech_title from teacher_info where name like '王%'
⑦ 在学生成绩表中查询成绩在80~89之间的学生的学号、课程号和成绩。
Select stud_id,course_id,grade from stud_grade where grade between 80 and 89
6、子查询的使用
① 查找在计算机工程系“01”工作的教师的情况。
Select * from teacher_info where jysh_id in
(select jysh_id from staffroom_info where deptcode='01')
② 查找计算机工程系“01”中所有担任多媒体技术“0401010106”的教师编号和姓名。
Select teacher_id,name from teacher_info where jysh_id in
(select jysh_id from staffroom_info where deptcode='01') and course_id='0401010106'
③ 查找计算机应用技术专业的学生学号、姓名、年龄、电话号码及其家庭地址。
Select stud_id,name,year(getdate())-year(birthday) age,telcode,address from stud_info where speccode =
(select speccode from specialty_code where specname='计算机应用技术')
7、连接查询的使用
① 在stud_info与stud_grade中按stud_id进行等值内连接,以查询所有参加考试的学生基本信息和成绩。
Select a.*,b.grade from stud_info a inner join stud_grade b
On a.stud_id=b.stud_id
② 实现teacher_info左外连接lesson_info。
Select * from teacher_info a left outer join lesson_info b
On a.course_id=b.course_id
8、数据汇总
① 查询全体教师的平均工资。
Select avg(salary) from teacher_info
② 求计算机工程系“01”教师的平均年龄。
Select avg(age) from teacher_info where jysh_id in
(select jysh_id from staffroom_info where deptcode='01')
③ 求计算机工程系“01”教师的总人数。
Select count(*) from teacher_info where jysh_id in
(select jysh_id from staffroom_info where deptcode='01')
9、GROUP BY、ORDER BY子句的使用
① 按职称统计各个教研室的教师人数。
Select jysh_id,count(*) from teacher_info group by jysh_id
② 将计算机工程系“01”职称为“讲师”的教师,按年龄由低到高排列。
Select * from teacher_info where jysh_id in
(select jysh_id from staffroom_info where deptcode='01') order by age
10、熟悉pubs数据库中的三个用户表:
employee(emp_id,fname,minit,lname,job_id,job_lvl,pub_id,hire_date),
job(job_id,job_desc,min_lvl,max_lvl),
publishers(pub_id,pub_name,city,state,country)。
他们分别是关于雇员、职务和出版社的基本表。
11、在查询分析器在窗口下用SELECT语句完成单表查询:
① 查询全体出版社的详细记录;
Select * from publishers
② 查询所有工作的job_id为7的职工的职工编号;
Select emp_id from employee where job_id=7
③ 查询工作的job_id小于7的职工的职工编号;
Select emp_id from employee where job_id<7
④ 查询在Germany和France的出版社的名字和所在城市;
Select pub_name,city from publishers where country='Germany' or country='France'
⑤ 查询lastname为Jablonski的雇员的firstname、job_id和hire_date;
Select emp_id from employee where job_id<7
⑥ 查询lastname的前两个字符为cr的职员的编号和firstname;
select emp_id,fname from employee where lname like 'cr%'
⑦ 查询job_id为5的职员的编号和job_lvl,查询结果按job_lvl的降序排列;
select emp_id,job_lvl from employee where job_id=5 order by job_lvl desc
⑧ 查询job_id为13的职员中job_lvl最高的职员的firstname 和lastname。
select top 1 fname,lname from employee where job_id=13 order by job_lvl desc
12、在查询分析器在窗口下用SELECT语句完成连接(嵌套)查询:
① 查询各个工作号与相应的工作人数;
select job_id,count(*) from employee group by job_id
② 查询每个职工及其工作的描述(job_desc)的情况;
select employee.*,job_desc from employee inner join jobs
on employee.job_id = jobs.job_id
③ 查询每个职工及其工作职务名其及所在出版社的名字;
select a.*,b.job_desc,c.pub_name from employee a inner join jobs b
on a.job_id = b.job_id inner join publishers c
on a.pub_id = c.pub_id
④ 查询与“Annette”(firstname)在同一个出版社工作的职工的firstname;
select fname from employee where pub_id=
(select pub_id from employee where fname='Annette')
⑤ 查询在美国工作的员工中工作职务为Editor的员工的fname 和lname;
select fname,lname from employee where job_id=
(select job_id from jobs where job_desc='Editor' )
and pub_id in (select pub_id from publishers where country='USA' )
⑥ 查询在New Moon Books这个出版社工作的员工中job_lvl大于100的职工的姓名和其所作工作的描述;
select a.fname,a.lname,b.job_desc from employee a inner join jobs b
on a.job_id=b.job_id where job_lvl>100 and pub_id in
(select pub_id from publishers where pub_name='New Moon Books' )
13、在查询分析器在窗口下用SELECT语句完成集合查询:
查询job_id为5和job_id为6的职工的姓名和职工所在出版社的名字。
select a.*,b.pub_name from employee a inner join publishers b
on a.pub_id=b.pub_id where job_id=5 or job_id=6
14、使用企业管理器创建一个名为“view_1”的视图,内容是显示学生表Student中计算机应用技术“040101”的学生的学号、姓名和性别。
create view view_1 As
select stud_id,name,gender from stud_info where speccode='040101'
15、使用查询分析器创建一个名为“view_2”的视图,内容是显示学生表中没有选修课程的学生的学号、姓名和班级,并且为该视图加密。
create view view_2
with encryption As
select stud_id,name,speccode from stud_info where stud_id not in
(select stud_id from stud_grade)
16、使用查询分析器修改名为“view_1”的视图,内容修改为显示学生表中男生的学号、姓名、性别和专业代码,并且以后所有对该视图的更新操作都必须符合所设定的条件。
alter view view_1 As
select stud_id,name,gender,speccode from stud_info
where gender=N'男' with check option
16、查询视图“view_1”中专业代码为‘040102’的学生所有信息。
select * from view_1 where speccode='040102'
17、向视图“view_1”中的所有字段插入一条记录。
insert view_1 values('0402010999','李四','男','040201')
实验4 Transact-SQL数据库编程实验
一、实验目的
1.掌握Transact-SQL的基础知识。
2.掌握
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
控制语句和功能性语句的格式及应用。
3.掌握存储过程和触发器的应用。
二、实验内容与步骤
在查询分析器在窗口下用T-SQL语句完成下列操作:
1、从数据表stud_info中,查找学号为0401030213的学生,找到则显示:“您好!XX同学”,否则显示“未找到”。
if exists (select * from stud_info where stud_id='0401030213')
print '您好!XX同学'
else
print '未找到'
2、从数据库teacher_info中,选取teacher_id、name、gender,如果gender为“女”则输出“女士”,如果为“男”则输出“先生”。
SELECT teacher_id,name,sex=CASE gender
WHEN N'男' THEN N'先生'
WHEN N'女' THEN N'女士'
ELSE '未知'
END from teacher_info
3、计算1~100之间所有能被3整除的数的个数及总和。
declare @x int,@s int
set @x=3
set @s=0
while (@x<100)
begin
set @s=@s+@x
set @x=@x+3
end
print @s
4、计算s=1!+2!+…+10!。
declare @n int,@s int,@i int,@st int
set @n=1
set @s=0
while (@n<=10)
begin
set @i=1
set @st=1
while (@i<=@n)
begin
set @st=@st*@i
set @i=@i+1
end
set @s=@s+@st
set @n=@n+1
end
print @s
5、输出字符串“School”中每一个字符的ASCII值和字符。
declare @pos int,@str char(6),@len int,@ch char(1)
set @pos=1
set @str='School'
set @len=datalength(@str)
while @pos<=@len
begin
set @ch=substring(@str,@pos,1)
select @ch ascchar,ascii(@ch) asccode
set @pos=@pos+1
end
6、从stud_grad表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”,小于60分输出“不及格”,60分(含60分)至70分输出“及格”,70分(含70分)至80分输出“良好”,大于等于80分输出“优秀”。
select stud_id,score=case
when grade is null then '未考'
when grade<60 then '不及格'
when grade<70 then '及格'
when grade<80 then '良好'
when grade>=80 then '优秀'
end
from stud_grade
7、查询pubs数据库的employee表,如果表中雇员的平均服务时间长于10年,则打印信息:‘我们的雇员都很忠诚:)’,否则打印信息:‘我们的雇员经常跳槽:(’。
use pubs
go
if (select avg( datediff(year,hire_date,getdate()) ) from employee) > 10
print '我们的雇员都很忠诚:)'
else
print '我们的雇员经常跳槽:('
8、查询pubs数据库中employee表,显示相关雇员信息(id,姓名,服务时间等),其中增加一个‘雇员类型’列:如果雇佣时间长于12年,则显示他为‘新雇员’,否则显示他为‘老雇员’。
use pubs
go
select
Emp_ID,
LName + '.' + FName '姓名',
datediff(year,hire_date,getdate()) as 'age' ,
'雇员类型' =
case
when datediff(year,hire_date,getdate()) < 12 then '新雇员'
when datediff(year,hire_date,getdate()) >= 12 then '老雇员'
end
From employee
Order by age
9、创建一个名为“proc_1”的存储过程,用于查看学生表的所有信息。然后调用该存储过程。
create procedure proc_1
as select * from stud_info
10、创建一个名为“proc_2”的存储过程,用于向学生表的所有字段添加一条记录,记录内容由调用时决定。然后调用该存储过程。
CREATE PROCEDURE proc_2
(@stud_id_1 char(10),
@name_2 nvarchar(4),
@birthday_3 datetime,
@gender_4 nchar(1),
@address_5 nvarchar(20),
@telcode_6 char(12),
@zipcode_7 char(6),
@mark_8 decimal,
@speccode_9 char(6))
AS
INSERT INTO stud_info( stud_id,name,birthday,gender,address,telcode, zipcode,mark,speccode)
VALUES ( @stud_id_1,@name_2,@birthday_3,@gender_4,@address_5,
@telcode_6,@zipcode_7,@mark_8,@speccode_9)
11、创建一个名为“proc_3”的存储过程,用于删除学生表中指定学号的记录,具体学号由调用时决定。然后调用该存储过程。
CREATE PROCEDURE proc_3 @stud_id_1 char(10)
AS DELETE FROM stud_info WHERE stud_id=@stud_id_1
12、修改存储过程“proc_4”,用于查询不小于指定成绩的学生的基本信息,具体成绩由调用时决定。
create procedure proc_4
@grade_1 decimal(4,1)
as
select * from stud_info where stud_id in
(select stud_id from stud_grade where grade>=@grade_1)
13、创建一个名为“proc_5”的存储过程,用于求一个3位整数的反序数。例如123的反序数为321。
create procedure proc_5
@n int
as select reverse(str(@n))
14、创建一个名为“trig_1”的触发器,当向学生表添加记录时,该触发器自动显示学生表的所有信息。
CREATE TRIGGER trig_1 ON stud_info
FOR INSERT
AS
select * from stud_info
15、创建一个名为“trig_2”的触发器,当试图向学生表添加、修改或删除记录时,该触发器自动显示如下信息:“对不起,你无权进行更新操作!”。
create trigger trig_2
on stud_info
instead of insert,delete,update
as
raiserror('对不起,你无权进行更新操作!',10,1)
16、修改“trig_3”的触发器,当向学生表修改记录时,该触发器自动显示修改前和修改后的记录。
create trigger trig_3
on stud_info
for update
as
select * from deleted
select * from inserted
17、创建一个名为“trig_4”的触发器,当向学生表删除记录时,该触发器自动删除成绩表中与之相关的所有记录。
create trigger trig_4
on stud_info
for delete
as
delete from stud_grade where stud_id in
(select stud_id from deleted)
18、创建一个名为“trig_5”的触发器,当向成绩表添加记录时,该触发器自动显示与该记录相关的学生的学号、姓名和专业编号。(本题要求创建之前先判断该触发器是否存在,若存在,则删除)
--if exists (select * from sysobjects where name=N'trig_5' and type ='TR')
if exists (select * from dbo.sysobjects where id = object_id(N'trig_5') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger trig_5
go
create trigger trig_5
on stud_grade
--with encryption
for insert
as
select stud_id,name,speccode from stud_info where stud_id
in (select stud_id from inserted)
实验5 数据库的管理与维护
一、实验目的
1.掌握SQL Server身份验证模式。
2.掌握创建和管理登录账户,创建和管理服务器角色和数据库角色。
3.掌握授予、拒绝或撤销权限的方法。
4.进一步了解备份和备份设备的有关概念,熟悉数据的备份和恢复,熟悉系统数据库的恢复。
二、实验内容与步骤
1、创建登录账户。
① 使用企业管理器创建通过SQL Server身份验证模式的登录,其登录名称为stu_login1,密码为stu111,默认数据库为student。
② 使用企业管理器创建通过Windows身份验证模式的登录,其登录名称为stu_login2,密码为stu222,默认数据库为student。(提示:先在Windows系统创建stu_login2用户)
③ 使用系统存储过程sp_addlogin创建登录,其登录名称为stu_login3,密码为stu333。
sp_addlogin 'stu_login3','stu333','student'
④ 使用企业管理器删除登录账户stu_login1,stu_login2。
⑤ 使用系统存储过程sp_droplogin从SQL Server中的登录账户stu_login3。
sp_droplogin 'stu_login3'
2、创建和管理数据库用户和角色。
① 创建登录名为stu_user,密码为stu123,默认数据库为student,并能连接到student数据库的用户。
EXEC sp_addlogin 'stu_user','stu123','student'
USE student
EXEC sp_grantdbaccess 'stu_user','stu_user'
② 使用企业管理器创建数据库角色stu_role1,然后将其添加到该数据库角色中,最后删除stu_role1。
sp_addrole 'stu_rol