数据库原理及应用 第 版 习题参考答案 下载本文

二. 填空题

1.利用存储过程机制,可以_____数据操作效率。 提高

2.存储过程可以接受输入参数和输出参数,对于输出参数,必须用_____词来标明。 OUTPUT 3.执行存储过程的SQL语句是_____。 EXEC (EXECUTE)

4.调用存储过程时,其参数传递方式有_____和_____两种。按参数位置 按参数名 5.修改存储过程的SQL语句是_____。ALTER PROC

6.SQL Server支持两种类型的触发器,它们是_____触发型触发器和_____触发型触发器。 前 后 7.在一个表上针对每个操作,可以定义_____个前触发型触发器。 一

8.如果在某个表的INSERT操作上定义了触发器,则当执行INSERT语句时,系统产生的临时工作表是_____。 INSERTED

9.对于后触发型触发器,当触发器执行时,引发触发器的操作语句(已执行完/未执行)_____。 已执行完 10.对于后触发型触发器,当在触发器中发现引发触发器执行的操作违反了约束时,需要通过_____语句撤销已执行的操作。 ROLLBACK

11.打开游标的语句是_____。 OPEN cursor_name

12.在操作游标时,判断数据提取状态的全局变量_____。 @@fetch_status 四.上机练习

以下各题均利用第3、4章建立的Students数据库以及Student、Course和SC表实现。 1. 创建满足下述要求的存储过程,并查看存储过程的执行结果。 (1) 查询每个学生的修课总学分,要求列出学生学号及总学分。

create proc p1 as

select sno,SUM(credit) as 总学分

from SC join Course c on c.Cno=SC.Cno group by sno

(2) 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在系作为输入参数,默认值为“计算机系”。

执行此存储过程,并分别指定一些不同的输入参数值,查看执行结果。 create proc p2

@dept varchar(20) = '计算机系' as

select s.sno,sname,c.cno,cname,credit from Student s join SC on s.Sno=SC.Sno join Course c on c.Cno=SC.Cno

where Sdept = @dept 执行示例1:EXEC P2

执行示例2:EXEC P2 '通信工程系'

(3) 查询指定系的男生人数,其中系为输入参数,人数为输出参数。

create proc p3

@dept varchar(20),@rs int output as

select @rs = COUNT(*) from Student where Sdept = @dept and Ssex = '男' (4) 删除指定学生的修课记录,其中学号为输入参数。

create proc p4 @sno char(7)

as

delete from SC where Sno = @sno

(5) 修改指定课程的开课学期。输入参数为:课程号和修改后的开课学期。

create proc p5

@cno char(6),@x tinyint as

update Course set Semester = @x where Cno = @cno

2. 创建满足下述要求的触发器(前触发器、后触发器均可),并验证触发器执行情况。 (1) 限制学生的年龄在15~45之间。

create trigger tri1

on student after insert,update as

if exists(select * from inserted where sage not between 15 and 45) rollback

(2) 限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}

create trigger tri2

on student after insert,update as

if exists(select * from student where sdept not in ('计算机系','信息管理系','数学系','通信工程系'))

Rollback

(3) 限制每个学期开设的课程总学分在20~30范围内。

create trigger tri3

on course after insert,update as

if exists(select sum(credit) from course

where semester in (select semester from inserted ) having sum(credit) not between 20 and 30 ) Rollback

(4) 限制每个学生每学期选课门数不能超过6门(设只针对插入操作)。

create trigger tri4 on sc after insert as

if exists(select * from sc join course c on sc.cno = c.cno where sno in (select sno from inserted) group by sno,semester having count(*) > 6 ) rollback

3. 创建满足下述要求的游标,并查看游标的执行结果。

(1) 列出VB考试成绩最高的前2名和最后1名学生的学号、姓名、所在系和VB成绩。

declare @sno char(10),@sname char(10),@dept char(14),@grade char(4) declare c1 SCROLL cursor for select s.sno,sname,sdept,grade

from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno

where cname = 'vb' order by grade desc open c1

print ' 学号 姓名 所在系 VB成绩'

print '---------------------------------------' fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade

fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade

fetch last from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade close c1 deallocate c1

(2) 列出每个系年龄最大的名学生的姓名和年龄,将结果按年龄降序排序。

declare @sname char(10),@age char(4),@dept char(20) declare c1 cursor for select distinct sdept from student open c1

fetch next from c1 into @dept while @@FETCH_STATUS = 0 begin

print @dept

declare c2 cursor for

select top 2 with ties sname,sage from student where sdept = @dept order by sage desc open c2

fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age print '' close c2 deallocate c2

fetch next from c1 into @dept end close c1 deallocate c1 第10章 安全管理 一.选择题

1.下列关于SQL Server数据库用户权限的说法,错误的是

B.通常情况下,数据库用户都来源于服务器的登录帐户

A

A.数据库用户自动具有该数据库中全部用户数据的查询权

C.一个登录帐户可以对应多个数据库中的用户

D.数据库用户都自动具有该数据库中public角色的权限 2.下列关于SQL Server数据库服务器登录帐户的说法,错误的是

B

A.登录帐户的来源可以是Windows用户,也可以是非Windows用户

B.所有的Windows用户都自动是SQL Server的合法帐户

C.在Windows身份验证模式下,不允许非Windows身份的用户登录到SQL Server服务器 D.sa是SQL Server提供的一个具有系统管理员权限的默认登录帐户 3.下列关于SQL Server 2008身份认证模式的说法,正确的是

C A.只能在安装过程中指定身份认证模式,安装完成之后不能再修改 B.只能在安装完成后指定身份认证模式,安装过程中不能指定

C.在安装过程中可以指定身份认证模式,安装完成之后还可以再对其进行修改 D.身份认证模式是系统规定好的,在安装过程中及安装完成后都不能进行修改 4.下列SQL Server提供的系统角色中,具有数据库服务器上全部操作权限的角色是 D

A.db_owner B.dbcreator C.db_datawriter

D.sysadmin

5.下列角色中,具有数据库中全部用户表数据的插入、删除、修改权限且只具有这些权限的角色是A.db_owner B.db_datareader C.db_datawriter

D.public

6.创建SQL Server登录帐户的SQL语句是 A

A.CREATE LOGIN B.CREATE USER C.ADD LOGIN

D.ADD USER 7. 下列SQL语句中,用于收回已授予用户权限的语句是 C

A.DROP B.DELETE C.REVOKE

D.ALTER

8.在SQL Server中,向数据库角色添加成员的SQL语句是 D

A.ADD member B.ADD rolemember C.sp_addmember

D.sp_addrolemember

9.下列关于数据库中普通用户的说法,正确的是

C

A.只能被授予对数据的查询权限

B.只能被授予对数据的插入、修改和删除权限 C.只能被授予对数据的操作权限 D.不能具有任何权限

10.下列关于用户定义的角色的说法,错误的是 A

A.用户定义角色可以是数据库级别的角色,也可以是服务器级别的角色 B.用户定义的角色只能是数据库级别的角色 C.定义用户定义角色的目的是简化对用户的权限管理 E. 用户角色可以是系统提供角色的成员 二.填空题

1. 数据库中的用户按操作权限的不同,通常分为_____、_____和_____三种。

系统管理员 数据库对象拥有者 普通用户

C