SQLServer2008数据库应用教程课后答案

更新时间:2023-03-13 15:49:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 数据库基础

一、单项选择题

1.C 2.A 3.C 4.D 5.D 6.B 7.A 8.B 9.B 10.D 11.C 12.A 13.C 14.B 15.A 16.B 17.A 18.D 19.B 20.B 21.A; D 22.A 23.C 24.D 25.B 26.B 27.B 28.D 29.B 30.B

二、填空题

1.概念;数据 2.属性 3.码

4.一对一联系;一对多(或多对一)联系;多对多联系 5.候选码 6.候选码

7.关系名(属性1,属性2,?,属性n)

8.关系数据结构;关系操作集合;关系完整性约束 9.实体;参照;用户定义的;实体;参照 10.空植

11.需求分析阶段;概念结构设计阶段;逻辑结构设计阶段;物理结构设计阶段;数据库实施阶段;数据库运行和维护阶段

12.准确了解并分析用户对系统的要求,尤其是用户的信息要求、处理要求、安全性与完整性要求,确定所要开发的应用系统的目标,产生用户和设计者都能接受的需求说明书,做为下一步数据库概念结构设计的基础。

13.将需求分析得到的用户需求抽象为信息结构即概念模型。

14.将概念结构进一步转化为某一DBMS支持的数据模型,并对其进行优化。 15.为逻辑数据模型选取一个最适合应用环境的物理结构,包括数据库在物理设备上的存储结构和存取方法。

三、指出以下各缩写的英文意思和中文意思

1. DB:DataBase

2. DBMS:Database Management System 3. RDBMS:

4. DBS:DataBase System

5. DBA:Relational Database Management System 6. NF:Normal Form

7. DDL:Data Definition Language

四、按题目要求回答问题

1

1.答:

公司编号公司名 地址 公司 1 聘用 N 职工

仓库 1 隶属 工资聘期职工编号 姓名 性别 N

仓库编号 仓库名 地址 2.答:

2 比赛时间 得分 编号 姓名 年龄 性别 项目编号 项目名称 级别 代表团 比赛类别 团编号 地区 住所 类别编号 类别名称 主管 1 成员 1 属于 N 运动员 参加 N 比赛项目

3.答:

(1)关系R是2NF。

因为R的候选码为课程名,而课程名→教师名,教师名→教师地址,所以课程名→教师地址,即存在非主属性教师地址对候选码课程名的传递函数依赖,因此R不是3NF。

又因为不存在非主属性对候选码的部分函数依赖,所以R是2NF。

(2)关系R存在删除异常。当删除某门课程时会删除不该删除的教师的有关信息。 (3)分解为高一级范式如下:

R1 课程名 数据库 教师名 刘辉 程序设计基础 赵兰 软件工程 计算机基础 R2 教师名 刘辉 赵兰 陈信 教师地址 Add1 Add2 Add1 陈信 刘辉 分解后,若删除课程数据时,仅对关系R1操作,教师地址信息在关系R2中仍然保留,不会丢失教师方面的信息。

4.答:

(1)R不属于3NF,它是2NF。

(2)因为R的候选码为职工号和职工名,而:

职工号→单位号,单位号→单位名,所以职工号→单位名,即存在非主属性“单位名”对候选码“职工号”的传递函数依赖。因此不是3NF。

规范化后的关系子模式为如下所示的关系R1与R2。

R1

职工号 01 02 03 04 R2

单位号 D3 D1 单位名 计算机 土木工程 职工名 赵高 高军 董林 林梅 年龄 20 25 38 25 性别 男 男 男 女 单位号 D3 D1 D3 D3

5.答:

(1)关系Stock是1NF,分析如下:

3

? 关系Stock的码为(counter,goods),counter、goods为主属性,price为非主属

性。 ? 存在的函数依赖有:(counter,goods)→price goods→price ? 因此可以看出,非主属性price不完全函数依赖于码,不符合2NF的定义。 ? 得出结论:关系Stock是1NF (2)存在异常:

? 删除异常:例如,如果删除柜台2的元组,则丢失了货物名称Envelop及其价格1。 ? 插入异常:例如,如果知道了商品Lamp的价格20,则不能马上将该商品插入到Stock

中,直到有一个柜台进了该货物才行。 (3)规范化:将以上关系分解为两个关系如下。

关系Counter-Goods 关系Goods-Price Counter Goods 1 1 2 3 3 Pen Ink Envelop Bag pen Goods Pen Ink Envelop Bag Price 55 4 1 40 第2章 SQL Server简介

一、单项选择题

1.B 2.C 3.D 4.B 5.C 6.D 7.A 8.B

二、简答题

1.答:

客户机/服务器结构把整个任务划分为客户机上的任务和服务器上的任务。客户机上的任务主要如下。

? 建立和断开与服务器的连接。 ? 提交数据访问请求。

? 等待服务通告,接受请求结果或错误。

? 处理数据库访问结果或错误,包括重发请求和终止请求。 ? 提供应用程序的友好用户界面。 ? 数据输入/输出及验证。 服务器上的任务主要如下。

? 为多用户管理一个独立的数据库。

? 管理和处理接收到的数据访问请求,包括管理请求队列、管理缓存、响应服务、管理结果和通知服务完成。

4

? 管理用户账号、控制数据库访问权限和其他安全性。 ? 维护数据库,包括数据库备份和恢复。

? 保证数据库数据的完整或为客户提供完整性控制手段。

2.答:

(1)两层结构

在两层结构中,SQL Server安装在一个中心服务器上,数据库存储在该服务器上,该服务器称为数据库服务器,可以被多台客户机访问。众多的客户机通过网络直接访问数据库服务器。客户机运行处理业务的程序和显示处理结果的程序。两层结构比较适合于用户量较少的情况,当用户量较大时,数据库服务器的性能会显著下降。

(2)三层结构

在三层结构中引入了一层应用服务器。客户机只运行向应用服务器发送请求和显示请求结果的程序,客户机没有处理业务的程序,应用服务器运行处理业务的程序,多个客户机可以同时访问应用服务器,应用服务器负责访问数据库服务器,并取回处理结果,将结果返回给客户机。三层结构适用于客户量较大的情况。

3.答:

SQL Server的四个系统数据库是master、model、msdb和tempdb数据库。

(1)master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息,包括所有的登录帐户信息、系统配置信息、SQL Server的初始化信息和其它系统及用户数据库的相关信息。

(2)model数据库是所有用户数据库和tempdb数据库的模板数据库,它含有master数据库所有系统表的子集,这些系统表是每个用户定义数据库所需要的。

(3)msdb数据库是代理服务数据库,用于为调度警报、作业和记录操作员的信息提供存储空间。

(4)tempdb数据库用于为所有的临时表、临时存储过程提供存储空间,它还用于任何其它的临时存储要求,例如存储SQL Server生成的工作表。tempdb数据库是全局资源,所有连接到系统的用户的临时表和存储过程都存储在该数据库中。tempdb数据库在SQL Server每次启动时都重新创建,因此该数据库在系统启动时总是干净的,临时表和存储过程在连接断开时自动除去。

4.答:

SQL Server包含的对象如:表、视图、存储过程、索引、触发器。

(1)表:在数据库中,所有的数据存放在表中,表由行(记录)和列(字段)组成,一个数据库可以包含多个表。

(2)视图:视图是由查询数据表产生的结果,是一种虚构的表。视图把表中的部分数据映射出来供用户使用,这样可以防止所有的用户直接对表进行操作而导致系统的性能和安全性的下降。

(3)存储过程:一个存储过程实际上是由一组SQL语句组成的完成特定功能的程序。存储过程在服务器端被编译后可以反复执行。

(4)索引:索引是对表中的一个或多个列的值进行排序的结构。可以利用索引提高对数据库表中的特定信息的访问速度。

(5)触发器:触发器由一组SQL语句组成,当对表或视图进行某种操作(添加、删除或修改)时,这组命令会在一定情况下自动执行。

5

1.答:

表约束(Constraint)是SQL Server提供的一种强制实现数据完整性的机制,包括主键(PRIMARY KEY)约束、惟一性(UNIQUE)约束、检查(CHECK)约束、默认(DEFAULT)约束`和外键(FOREIGN KEY)约束。

2.答:

规则(Rules)是一种SQL Server对象,它用于执行一些与CHECK约束相同的功能。CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。CHECK 约束作为CREATE TABLE语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。

3.答

连接查询包括内连接、外连接和交叉连接等。

内连接使用比较运算符(最常使用的是等号,即等值连接)根据每个表共有列的值匹配两个表中的行。只有每个表中都存在相匹配列值的记录才出现在结果集中。在内连接中,所有表是平等的,没有主次之分。

与内连接相对,参与外连接的表有主次之分。以主表的每一行数据去匹配从表中的数据列,符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。

在交叉连接查询中,两个表中的每两行都可能互相组合成为结果集中的一行。交叉连接并不常用,除非需要穷举两个表的所有可能的记录组合。

4.答

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

五、上机练习题

(一)表的定义及约束

2.答: (1)

CREATE TABLE 职工基本信息 (职工编号 CHAR(5) PRIMARY KEY, 姓名 CHAR(10) NOT NULL, 性别 CHAR(2), 出生日期 DATETIME, 部门编号 CHAR(3))

(2)

CREATE TABLE 工资

(职工编号 CHAR(5) PRIMARY KEY, 基本工资 MONEY, 奖金 MONEY, 实发工资 MONEY)

(3)

CREATE TABLE 部门信息

(部门编号 CHAR(3) PRIMARY KEY,

11

部门名称 CHAR(20) NOT NULL, 部门简介 VARCHAR(50))

3.答:

ALTER TABLE 职工基本信息ADD 职称 CHAR(10)

4.答:

ALTER TABLE 职工基本信息 DROP COLUMN 职称

5.答:

ALTER TABLE 部门信息 ADD CONSTRAINT uk_dptname UNIQUE(部门名称)

6.答:

ALTER TABLE 职工基本信息 ADD CONSTRAINT chk_sex CHECK (性别 in ('男','女'))

7.答:

ALTER TABLE 工资 ADD CONSTRAINT chk_salary CHECK (基本工资>0)

8.答:

ALTER TABLE 工资 ADD CONSTRAINT dftsalary1 DEFAULT 0 FOR 基本工资 ALTER TABLE 工资 ADD CONSTRAINT dftsalary2 DEFAULT 0 FOR 奖金

9.答:

ALTER TABLE 职工基本信息 ADD CONSTRAINT dftsex DEFAULT '男' FOR 性别

10.答:

ALTER TABLE 职工基本信息 ADD CONSTRAINT fk_1 FOREIGN KEY (部门编号) REFERENCES 部门信息(部门编号) ALTER TABLE 工资 ADD CONSTRAINT fk_2 FOREIGN KEY (职工编号) REFERENCES 职工基本信息(职工编号)

11.答:

ALTER TABLE 职工基本信息 DROP CONSTRAINT fk_1 ALTER TABLE 工资 DROP CONSTRAINT fk_2

(二)表的更新

1.答:

INSERT INTO 职工基本信息 VALUES ('10001','王佳','女','1979/02/01','001') INSERT INTO 职工基本信息 VALUES ('20001','张欣','男','1965/05/10','002') INSERT INTO 职工基本信息 VALUES ('20003','李勇','男','1976/08/01','002') INSERT INTO 职工基本信息 VALUES ('10002','刘军','男','1973/07/01','001')

2.答:

INSERT INTO 工资(职工编号,基本工资,奖金) VALUES ('10001',2000,2200) INSERT INTO 工资(职工编号,基本工资,奖金) VALUES ('10002',2500,3000)

3.答:

INSERT INTO 工资(职工编号,基本工资,奖金) SELECT 职工编号,基本工资,奖金 FROM 临时工资信息

4.答:

CREATE TABLE 部门平均年龄 (部门编号 CHAR(15), 平均年龄 SMALLINT)

5.答:

INSERT INTO 部门平均年龄

12

SELECT 部门名称,AVG(year(getdate())-YEAR(出生日期)) FROM 职工基本信息 GROUP BY 部门编号

6.答:

UPDATE 工资 SET 奖金=奖金*1.1 FROM 职工基本信息

WHERE 职工基本信息.职工编号=工资.职工编号 AND 职工基本信息.部门编号='001'

7.答:

UPDATE 工资 SET 实发工资=基本工资+奖金

8.答:

DELETE FROM 工资 WHERE 职工编号='10001'

9.答:

DELETE 工资 FROM 职工基本信息

WHERE 职工基本信息.职工编号=工资.职工编号 AND 职工基本信息.部门名称='001'

(三)表的查询

1.答:

SELECT * FROM Employees

2.答:

SELECT Emp_Name,Sex,Wage FROM Employees

3.答:

SELECT Emp_Name,Sex,Wage*1.2 as NewWage FROM Employees

4.答:

SELECT DISTINCT title FROM Employees

5.答:

SELECT Emp_Name, title FROM Employees WHERE Dep_id=1

6.答:

SELECT Emp_Name FROM Employees WHERE title='部门经理' AND Sex='女'

7.答:

SELECT * FROM Employees WHERE Wage BETWEEN 3000 AND 4000

8.答:

SELECT * FROM Employees WHERE Wage NOT BETWEEN 3000 AND 4000

9.答:

SELECT * FROM Employees WHERE Dep_id IN(1,2)

10.答:

SELECT * FROM Employees WHERE IdCard LIKE '110%'

11.答:

SELECT * FROM Employees WHERE IdCard LIKE '[0-3]%'

12.答:

SELECT MAX(Wage),MIN(Wage),SUM(Wage),AVG(Wage) FROM titles

13.答:

SELECT COUNT(DISTINCT(title)) FROM Employees

14.答:

SELECT COUNT(*) FROM Employees WHERE title='部门经理'

15.答:

13

SELECT Dep_id AS 部门编号,COUNT(emp_id) AS 人数 FROM Employees GROUP BY Dep_id

16.答:

SELECT Dep_id AS 部门编号, AVG(Wage) AS 平均工资 FROM Employees GROUP BY Dep_id

17. 答:

SELECT d.Dep_id AS 部门编号, d.Dep_name AS 部门名称, e.Emp_name AS 姓名, e.Wage AS 工资 FROM Employees e, Departments d WHERE e.Dep_id= d.Dep_id ORDER BY d.Dep_id COMPUTE AVG(Wage) BY d.Dep_id

18.答:

SELECT e.Emp_name, e.Sex, e.Title, d.Dep_name

FROM Employees e, Departments d WHERE e.Dep_id= d.Dep_id

19.答:

SELECT e.Emp_name, e.Sex, e.Title, d.Dep_name

FROM Employees e INNER JOIN Departments d ON e.Dep_id= d.Dep_id

20.答:

SELECT d.Dep_name, e.Emp_name, e.Sex, e.Title

FROM Departments d LEFT JOIN Employees e ON e.Dep_id= d.Dep_id

21.答:

SELECT * FROM Employees

WHERE Dep_id=(SELECT Dep_id FROM Departments WHERE Dep_name='办公室')

(四) (五)视图

1.答:

CREATE VIEW view1 AS

SELECT e.Emp_name AS 姓名, e.Sex AS 性别, e.Title AS 职务, d.Dep_name AS 部门 FROM Employees e INNER JOIN Departments d ON e.Dep_id = d.Dep_id

2.答:

SELECT * FROM view1

3.答:

SELECT * FROM view1 WHERE 姓名 LIKE '李%'

4.答:

ALTER VIEW view1 AS

SELECT e.Emp_name AS 姓名,e.Title AS 职务, d.Dep_name AS 部门 FROM Employees e INNER JOIN Departments d ON e.Dep_id = d.Dep_id

5.答:

DROP VIEW view1

14

第7章 规则和索引

一、填空题

1.CREATE RULE 2.绑定规则 3.sp_unbindrule 4.DROP RULE 5.聚集 6.B树

7.CREATE INDEX 8.INCLUDE

二、选择题

1.B 2.C 3.B 4.C 5.C

三、判断题

1.A 2.B 3.B 4.A 5.A

四、问答题

1.答

规则是用于执行一些与检查约束相同的功能。检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束。

检查约束可以在CREATE TABLE语句中定义,而规则作为独立的对象创建,然后绑定在指定的列上。

2.答

用户对数据库最常用的操作就是查询数据。在数据量比较大时,搜索满足条件的数据可能会花费很长时间,从而占用较多的服务器资源。为了提高数据检索的能力,数据库中引入了索引的概念。

数据库的索引和书籍中的目录相似。有了索引,就可以快速地在书中找到需要的内容,而无需顺序浏览全书了。书中的目录是主要章节的列表,其中注明了包含各一章节的页码。而数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的记录所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引。

索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。因为索引是有序排列的,所以会大大提高索引的效率。

3.答

参考7.2.7小节。

五、上机练习题

15

第8章 存储过程、函数和触发器

一、填空题

1.服务器;客户

2.系统存储过程;用户自定义存储过程;临时存储过程;远程存储过程;扩展存储过程

3.局部临时存储过程;全局临时存储过程 4.#;##

5.输入参数;输出参数 6.RETURN

7.ALTER PROCEDURE

8.函数名;参数;编程语句;返回值 9.事件;命令

10.INSTEAD OF触发器;AFTER触发器;CLR触发器 11.原子性;一致性;隔离性;持久性 12.显式事务;隐式事务

13.ROLLBACK TRANSACTION

二、选择题

1.B 2.B 3.D 4.C 5.B 6.B 7.C

三、判断题

1.A 2.B 3.A 4.B

四、问答题

1.答

使用SQL Server中的存储过程而不使用存储在客户计算机本地的Transact-SQL程序的优势有:

(1)允许模块化程序设计

只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。

(2)允许更快执行

如果某操作需要大量Transact-SQL代码或需重复执行,存储过程将比Transact-SQL批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行Transact-SQL语句时,都要从客户端重复发送,并且在SQL Server每次执行这些语句时,都要对其进行编译和优化。

(3)减少网络流量

一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

(4)可作为安全机制使用

16

即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。

2.答

触发器是一种特殊类型的存储过程,它在指定表中的数据发生变化时自动执行。触发器与普通存储过程的不同之处在于:触发器的执行是由事件触发的,而普通存储过程是由命令调用执行的。

3.答

? 触发器是自动执行的,不需要管理员手动维护数据库的数据完整性。

? 触发器可以对数据库中的相关表进行级联更改。例如,可以在表Departments中定

义触发器,当用户删除表Departments中的记录时,触发器将删除表Employees中对应部门的记录。

? 触发器可以限制向表中插入无效的数据,这一点与CHECK约束的功能相似。但在

CHECK约束中不能使用到其他表中的字段,而在触发器中则没有此限制。例如,可以在表Employees中定义触发器,限制插入的记录其Dep_id字段值必须在表Departments中存在对应的记录。

五、上机练习题

(一)存储过程

1.答:

USE HrSystem

GO

IF EXISTS (SELECT name FROM sysobjects WHERE name ='avg_wage' AND type = 'P') DROP PROCEDURE avg_wage GO

CREATE PROC avg_wage @avgwage FLOAT OUTPUT AS

SELECT @avgwage=AVG(wage) FROM Employees

2.答:

DECLARE @avgwage FLOAT EXEC avg_wage @avgwage OUTPUT PRINT @avgwage

3.答:

USE HrSystem

GO

IF EXISTS (SELECT name FROM sysobjects WHERE name ='max_wage' AND type = 'P') DROP PROCEDURE max_wage GO

CREATE PROC max_wage

17

@depname char(50), @maxwage FLOAT OUTPUT AS

SELECT @maxwage=MAX(e.wage) FROM Employees e INNER JOIN Departments d ON e.Dep_id=d.Dep_id WHERE d.Dep_name=@depname

4.答:

DECLARE @maxwage FLOAT,@depname CHAR(50) EXEC max_wage '财务部', @maxwage OUTPUT PRINT @maxwage

5.答:

DROP PROCEDURE avg_price,max_wage

(二)触发器

1.答:

(1)创建触发器语句

USE 学生信息

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'TRG1' AND type = 'TR') DROP TRIGGER TRG1 GO

CREATE TRIGGER TRG1 ON 专业 FOR INSERT AS

SELECT * FROM inserted

(2)测试语句

INSERT INTO 专业 VALUES('111','新专业名称','001')

(3)测试结果

在“网格”选项卡上显示:

在“消息”选项卡上显示:

(所影响的行数为 1 行)

2.答:

(1)创建触发器语句

USE 学生信息

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TRG2' AND type = 'TR') DROP TRIGGER TRG2 GO

CREATE TRIGGER TRG2 ON 专业 FOR DELETE AS

RAISERROR ('不允许删除专业表中的记录',16,1) SELECT * FROM deleted

ROLLBACK TRANSACTION --回滚事务

(2)测试语句

18

DELETE FROM 专业 WHERE 专业编号='111'

(3)测试结果

在“消息”选项卡上显示:

服务器: 消息 50000,级别 16,状态 1,过程 TRG2,行 4 不允许删除专业表中的记录

(所影响的行数为 1 行)

在“网格”选项卡上显示:

3.答:

(1)创建触发器语句

USE 学生信息

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TRG3' AND type = 'TR') DROP TRIGGER TRG3 GO

CREATE TRIGGER TRG3 ON 专业 FOR UPDATE AS

IF UPDATE(专业名称) BEGIN

RAISERROR('不能修改专业名称',15,1) ROLLBACK TRANSACTION END

(2)测试语句

UPDATE 专业 SET 专业名称='新专业名称B' WHERE 专业编号='111'

(3)测试结果

在“消息”选项卡上显示:

服务器: 消息 50000,级别 15,状态 1,过程 TRG3,行 6 不能修改专业名称

4.答:

(1)创建触发器语句

USE 学生信息

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TRG4' AND type = 'TR') DROP TRIGGER TRG4 GO

CREATE TRIGGER TRG4 ON 学生基本信息 FOR UPDATE AS

IF UPDATE(学号) OR UPDATE (姓名) BEGIN

RAISERROR('注意,不允许修改学号或姓名',15,1)

19

ROLLBACK TRANSACTION END

(2)测试语句

① UPDATE 学生基本信息 SET 学号='990020211' WHERE 学号='990020210' ② UPDATE 学生基本信息 SET 姓名='张三' WHERE 学号='990020210'

(3)测试结果

服务器: 消息 50000,级别 15,状态 1,过程 TRG4,行 7 注意,不允许修改学号或姓名

5.答:

DROP TRIGGER TRG1,TRG2,TRG3,TRG4,TRG5

第9章 游标管理

8.3 练习题

一、填空题

1.Transact-SQL 游标;应用编程接口(API)服务器游标;客户端游标 2.静态游标;动态游标;只进游标;键集驱动游标 3.OPEN 4.SCROLL 5.FETCH

6.@@FETCH_STATUS 7.CLOSE

8.DEALLOCATE

二、选择题

1.A 2.C 3.C 4.D 5.D 6.B

三、判断题

1.B 2.A 3.B 4.B 5.A

四、问答题

1.答

用数据库语言来描述,游标是映射结果集并在结果集内的单个行上建立一个位置的实体。有了游标,用户就可以访问结果集中的任意一行数据了。在将游标放置到某行之后,可以在该行或从该位置开始的行块上执行操作。最常见的操作是提取(检索)当前行或行块。

游标有以下主要的功能:

? 允许定位在结果集的特定行。

? 从结果集的当前位置检索一行或多行。

? 支持对结果集中当前位置的行进行数据修改。

? 如果其他用户需要对显示在结果集中的数据库数据进行修改,游标可以提供不同级

20

别的可见性支持。

? 提供脚本、存储过程和触发器中使用的访问结果集中的数据的Transact-SQL语句。

2.答

SQL Server支持以下3种游标的实现:

? Transact-SQL 游标。使用Transact-SQL语句创建的游标,主要用在Transact-SQL

脚本、存储过程和触发器中。Transac-SQL游标在服务器上实现并由从客户端发送到服务器的Transact-SQL语句管理。它们还包含在批处理、存储过程或触发器中。 ? 应用编程接口(API)服务器游标。支持OLE DB、ODBC和DB-Library中的API

游标函数。API服务器游标在服务器上实现。每次客户应用程序调用API游标函数时,SQL Server OLE DB提供程序、ODBC驱动程序或DB-Library动态链接库(DLL)就把请求传送到服务器,以便对API服务器游标进行操作。

? 客户端游标。由SQL Server ODBC驱动程序、DB-Library DLL和实现ADO API

的DLL在内部实现。客户端游标通过在客户端高速缓存所有结果集行来实现。每次客户应用程序调用API游标函数时,SQL Server ODBC驱动程序、DB-Library DLL或ADO DLL就对高速缓存在客户端中的结果集行执行游标操作。

由于Transact-SQL游标和API服务器游标都在服务器端实现,它们一起被称为服务器游标。

SQL Server支持4种API服务器游标类型,它们是静态游标、动态游标、只进游标和键集驱动游标。

3.答

首先声明一个游标,然后打开游标,从游标中读取数据,使用游标函数;游标使用完成后,关闭游标;如果不再继续使用,则删除游标。

五、上机练习题

1.答:

USE HrSystem

DECLARE MyCursor1 SCROLL CURSOR

FOR SELECT * FROM Employees where wage>3000 OPEN Mycursor1

FETCH FIRST FROM Mycursor1 FETCH LAST FROM Mycursor1

2.答: (1)

USE HrSystem

DECLARE MyCursor2 CURSOR STATIC FOR SELECT * FROM Employees OPEN MyCursor2 SELECT @@CURSOR_ROWS

(2)

USE HrSystem

DECLARE MyCursor3 CURSOR KEYSET FOR

21

SELECT * FROM Employees OPEN MyCursor3 SELECT @@CURSOR_ROWS

(3)

USE HrSystem

DECLARE MyCursor4 CURSOR DYNAMIC FOR SELECT * FROM Employees OPEN MyCursor4 SELECT @@CURSOR_ROWS

3.答:

USE HrSystem

DECLARE MyCursor5 SCROLL CURSOR

FOR SELECT * FROM Employees WHERE Sex='男' OPEN MyCursor5

FETCH NEXT FROM MyCursor5 WHILE @@FETCH_STATUS = 0 FETCH NEXT FROM MyCursor5 CLOSE MyCursor5 DEALLOCATE MyCursor5

第10章 维护数据库

一、填空题

1.数据库快照 2.“稀疏文件”

3.AS SNAPSHOT OF

4.FROM DATABASE_SNAPSHOT 5.DROP DATABASE

6.物理设备名称;逻辑设备名称

7. sp_addumpdevice;sp_dropdevice 8. 差异

9. WITH NORECOVERY;WITH RECOVERY 10. REPLACE

二、选择题

1.A 2.D 3.C 4三、判断题

1.A 2.A 3.A 4四、问答题

1.答

22

.D 5.A

.A 5.B

数据库快照是数据库的只读、静态视图,数据库可以有多个快照。创建快照时,每个数据库快照在事务上与源数据库一致。在被数据库所有者显式删除之前,快照始终存在。

可以在报表中使用数据库快照。另外,当数据库出现用户错误,还可将数据库恢复到创建快照时的状态。丢失的数据仅限于创建快照后数据库更新的数据。数据库快照必须与数据库在同一服务器实例上。

数据库快照是在数据页级运行的。也就是说,创建数据库快照后,对源数据库页的修改之前,源数据库页中的数据将复制到快照中。快照是一个很形象的名词,在你移动之前按下快门,复制了你当时的形象。

为了存储快照中复制的源数据库页,SQL Server 2008使用了“稀疏文件”。稀疏文件是NTFS文件系统的一项功能。将数据写入稀疏文件后,NTFS将分配磁盘空间以保存该数据。稀疏文件最初是空白文件,不包含用户数据,而且操作系统也没有为其分配存储用户数据的磁盘空间。在创建数据库快照后,SQL Server将对源数据库的修改都保存在稀疏文件中,随着对源数据库页的不断修改,稀疏文件也变得越来越大。

2.答

执行恢复到数据库快照的操作时,应该注意以下几点: ? 在执行恢复操作之前,应该关闭其他所有与目标数据库的连接。例如,在SQL Server

Management Studio中与当前数据库有连接的其他窗口。 ? 建议对数据库先进行备份操作。 ? 删除关于此数据库的其他快照。

? 在创建数据库快照后数据库发生的变化在恢复操作完成后将丢失。

3.答:

SQL Server提供了以下4种不同的数据库备份方式。 (1)完整数据库备份

完整备份指对整个数据库进行备份,包括数据和事务日志。当数据库发生故障时,可以完整地恢复数据库中的数据。对于小型数据库而言,使用完整备份是最佳的选择。但如果数据库中的数据量很大,执行完整备份会花费很多的时间,而且会占用大量的存储空间。因此,对于大型数据库而言,一般都会使用差异备份的方法进行补充。 (2)差异数据库备份 顾名思义,差异数据库备份并不对数据库执行完整的备份,它只是对上次备份数据库后所发生变化的部分进行备份。差异数据库备份需要有一个参照的基准,即上一次执行的完整数据库备份。差异数据库备份的速度比较快,在还原差异数据库备份时,需要首先还原基准数据库备份,然后在此基础上再还原差异的部分。 (3)事务日志备份

事务日志包含了自上次进行完整数据库备份、差异数据库备份或事务日志备份以来所完成的事务。可以使用事务日志备份将数据库恢复到特定的即时点或恢复到故障点。 (4)数据库文件和文件组备份

只备份特定的数据库文件或文件组,常用于超大型数据库的备份。

五、上机练习题

5.答: (3)

23

BACKUP DATABASE mydb1 TO mycopy1

(4)

RESTORE DATABASE mydb3 FROM mycopy1 WITH

MOVE 'f1'

TO 'd:\\sql_data\\mydb3-f1.mdf', MOVE 'f2'

TO 'd:\\sql_data\\mydb3-f2.mdf', MOVE 'f3'

TO 'd:\\sql_data\\mydb3-f3.mdf', MOVE 'lg1'

TO 'd:\\sql_log\\mydb3-lg1.lgf'

(5)

DROP DATABASE mydb2,mydb3

第11章 SQL Server安全管理

一、填空题

1.SQL Server登录;数据库用户;权限;角色 2.Windows 身份验证模式;混合模式 3.sp_grantdbaccess 4.DROP USER 5.Public

6.对象权限;语句权限;暗示性权限 7.sp_addrole;sp_droprole

二、选择题

1.D 2.C 3.D 4.C 5.A 6.A 7.B 8.C

三、判断题

1.B 2.A 3.A 4.A

四、问答题

1.答

SQL Server的安全管理模型中包括SQL Server登录、数据库用户、权限和角色4个主要方面,具体说明如下:

(1)SQL Server登录 要想连接到SQL Server服务器实例,必须拥有相应的登录账户和密码。身份认证系统验证用户是否拥有有效的登录账户和密码,从而决定是否允许该用户

24

连接到指定的SQL Server服务器实例。

(2)数据库用户 通过身份认证后,用户可以连接到SQL Server服务器实例。但是,这并不意味着该用户可以访问到指定服务器上的所有数据库。在每个SQL Server数据库中,都存在一组SQL Server用户账户。登录账户要访问指定数据库,就要将自身映射到数据库的一个用户账户上,从而获得访问数据库的权限。一个登录账户可以对应多个用户账户。

(3)权限 权限是规定了用户在指定数据库中所能进行的操作。

(4)角色 类似于Windows的用户组,角色可以对用户进行分组管理。可以对角色赋予数据库访问权限,此权限将应用于角色中的每一个用户。

2.答

SQL Server提供以下两种身份验证模式: ? Windows 身份验证模式 当用户通过Windows NT 4.0、Windows 2000或Windows 2003用户账户进行连接时,SQL Server通过回叫Windows系统以获得信息,重新验证账户名和密码。

SQL Server通过使用网络用户的安全特性控制登录访问,以实现与Windows的登录安全集成。用户的网络安全特性在网络登录时建立,并通过Windows域控制器进行验证。当网络用户尝试连接时,SQL Server使用基于Windows的功能确定经过验证的网络用户名。SQL Server于是验证此人是否是如其所说的那个人,然后只基于网络用户名允许或拒绝登录访问,而不要求单独的登录名和密码。

? 混合模式(Windows身份验证和SQL Server身份验证)

SQL Server可以设置SQL Server登录账户。用户登录时,SQL Server将对用户名和密码进行验证。如果SQL Server未设置登录账户或密码不正确,则身份验证将失败,而且用户将收到错误信息。

应用程序开发人员和数据库用户也许更喜欢“SQL Server身份验证”模式,因为他们可以通过对登录账户和密码的管理实现权限控制。

SQL Server的身份验证模式下图所示。

25

使用客户应用程序连接到SQL Server 身份验证模式? Windows 身份验证模式 混合模式 否 使用Windows帐户连接吗? 是 连接许可? 否 使用SQL Server 登录连接吗? 是 是有效登录吗? 是 密码正确吗? 是 否 否 否 是 SQL Server拒绝连接 SQL Server接受连接 SQL Server拒绝连接

五、上机练习题

(一)管理安全帐户

6.找到SQL Server默认的登录帐号sa、BUILTIN\\Administrators,观察并记录其登录类型、默认数据库及所属的服务器角色。

(1)sa: 登录类型 标准 默认数据库 master 服务器角色 System Administrators (2)BUILTIN\\Administrators: 登录类型 Windows组 默认数据库 master 服务器角色 System Administrators (二)使用Transact-SQL命令管理登录帐户

1.答:

从工具栏的数据库下拉列表中可以看到HrSystem数据库。因为当前是以Windows系统管理员身份连接SQL Server的,因此具有所有权限。

2.答:

(1)sp_addlogin 'log1','111'

sp_addlogin 'log2','222'

(2)以log1帐户的身份登录后,从工具栏的数据库下拉列表中不能看到HrSystem数据库。因为还没有将登录帐户log1指定为HrSystem数据库的用户。

(3)以log1帐户的身份登录后,从工具栏的数据库下拉列表中能看到SQL Server的

26

系统数据库和示例数据库。因为在这些数据库中含有guest用户帐户。

3.答:

(1)exec sp_grantdbaccess 'log1'

exec sp_grantdbaccess 'log2'

(2)以log1帐户的身份登录后,从工具栏的数据库下拉列表中可以看到HrSystem数据库。因为已经通过sp_grantdbaccess将log1指定为HrSystem数据库的用户。

4.答:

执行结果为:

服务器: 消息 229,级别 14,状态 5,行 1

拒绝了对对象 ' Employees '(数据库 'HrSystem',所有者 'dbo')的 SELECT 权限。

因为还没有为HrSystem数据库用户log1授予任何权限。 (三)使用Transact-SQL命令管理数据库用户的权限

1.答:

GRANT select, insert, update ON Employees TO log1 WITH GRANT OPTION

2.答:

GRANT select ON Employees TO log2

3.答:

DENY delete ON Employees TO log1

4.答:

DENY update(Dep_id) ON Employees TO log1

5.答:

GRANT create table TO log2 DENY create view TO log2

6.答:

(1)创建表测试语句:

create table Mytable (a int primary key, b char(5))

(2)创建视图测试语句:

create view Myview

as select Emp_name,Sex from Employees

提示信息:

服务器: 消息 262,级别 14,状态 1,过程 Myview,行 2 在数据库 'HrSystem' 中拒绝了 CREATE VIEW 权限。

7.答:

REVOKE ALL FROM LOG2

8.答:

REVOKE SELECT ON Employees FROM log1 CASCADE

27

9.答:

REVOKE GRANT OPTION FOR ALL ON Employees FROM log1 CASCADE REVOKE ALL ON Employees FROM log1

10.答:

USE HrSysrtem EXEC sp_addrole myrole

EXEC sp_addrolemember myrole,log1 EXEC sp_addrolemember myrole,log2 GRANT select ON Departments TO myrole

第12章 SQL Server代理服务

一、填空题

1.执行作业;监视SQL Server;激发警报 2.start

3.SQL Server 代理程序作业 4.电子邮件;寻呼机;net send

5.SQL Server事件警报;SQL Server性能条件警报,WMI事件警报 6.sp_delete_operator

二、选择题

1.D 2.C 3.B 4.A 5.D 6.A

三、判断题

1.B 2.A 3.B 4.A

四、上机练习题(略)

第13章 Visual C#程序设计基础

一、填空题

1.公共语言运行库(CLR); .NET Framework 类库 2.System

3.值类型;引用类型 4.类(class);数组(array);接口(interface);委托(delegate) 5.object;string

6.do…while;while;for;foreach 7.System.Exception

二、选择题

28

1.C 2.C 3.D 4.C 5.A 6.A 7.C 8.A 9. C

三、判断题

1.A 2.B 3.B 4.A 5.B

四、上机练习题(略)

第14章 Visual C#数据库程序设计

一、填空题

1.ADO.NET 2.Text类型

3.SelectCommand;InsertCommand;UpdateCommand;DeleteCommand 4.DataSet

二、选择题

1.D 2.B 3.A 4.C

三、上机练习题

29

本文来源:https://www.bwwdw.com/article/1z2x.html

Top