二. 填空题
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