SQL Server数据库程序设计认证试题

1

1.你是一家公司的数据库开发员,你正在创建一个数据库用来存储15所中学运动会的统计信息,这些信息将被
50个公司用来在他们网站上发布运动会信息。每个公司的Web站点用不同的格式排列和显示统计表。你需要把数
据打包传送给这些公司,你该怎么做?(SQL对XML支持)
A. 用包括FOR XML 子句的SELECT语句来提取数据
B. 使用sp_makewebtask系统存储过程来产生由SELECT语句返回的数据的HTML文本
C. 创建数据传输服务数据包来导出数据库的数据,并把这些数据放到tab分隔的文本文件中
D. 创建一个应用程序,此应用程序用SQL_DMO提取数据库的数据并把这些数据转换为标准电子数据交换(EDI)文

答案: A.
XML可扩展标记语言,用于在web上显示数据的语言,SELECT语句的for xml子句可以使查询返回XML格式,而不是
标准的行集结果;Sp_makewebtask创建一项生成HTML文档的任务,而XML比HTML更复杂;tab分隔文件常常在一些
电子制表软件中被使用,如Excel;SQL_DMO是SQL分布式管理对象的缩写,允许用支持自动化或 COM 的语言编
写应用程序,以管理 SQL Server 安装的所有部分。
2.你是一邮件订购公司的数据库开发者,该公司有两台名为CORP1和CORP2 的SQLServer2000的计算机。CORP1
是台在线处理事务的服务器。CORP2存放销售的历史数据。CORP2已经添加了一个连接服务到CORP1上。销售部经
理请你创建一个是谁购买软盘的用户清单。这清单每个月生成一次,软盘在数据库中用ID21来表示。你必须从一
张名为SalesHistory的表中检索数据。该表放在本地的CORP2 Archive数据库中。你需要在CORP1上执行这个请求。
你该选择哪个选项?(远程服务器)
A. EXEC sp_addlinkedserver ‘CORP2', ‘SQL Server’
GO
SELECT CustomerID FROM CORP2.Archive.dbo.SalesHistory
WHERE CategoryID = 21
B. SELECT CustomerID FROM OPENROWSET (‘SQLOLEDB’, ‘CORP2’; ‘p*word’, ‘SELECT
CustomerID FROM Archive.dbo.SalesHistory WHERE CategoryID = 21’)
C. SELECT CustomerID FROM CORP2.Archive.dbo.SalesHistory
WHERE CategoryID = 21
D. EXEC sp_addserver ‘CORP2’
GO
SELECT CustomerID FROM CORP2.Archive.dbo.SalesHistory
WHERE CategoryID = 21
答案: C.
SELECT CustomerID FROM SalesHistory WHERE CategoryID = 21,由于表SalesHistory是在远程的CORP2服务器
上,并且也已经建立了连接,所以可以直接使用分布式查询。
sp_linkedserver是建立与服务器的连接;OPENROWSET是一种使用 OLE DB 连接并访问远程数据的一次性的、
特殊的方法,无需设置链接服务器;sp_addserver定义本地或远程服务器的名称
3.你是一名Trey Research的数据库开发者,你创建两个事务来帮助将雇员的数据信息写入公司的数据库中。一
个事物将雇员的姓名和地址插入数据库中,这个事务很重要,另外一个事务将雇员的人数统计插入到数据库中,
这个事务不那么重要。在数据库使用的高峰期,在服务器有时遇到错误的期间管理员会通知。每次发生时,数据
库服务器会随机地终止其中一个事务。你必须确定当服务器终止其中一个事务时,它不会终止比较重要的那个事
务。你应该做什么?(事务处理)
A.为插入雇员姓名和地址信息的那个事务设置 DEADLOCK_PRIORITY to LOW 选项
B.为插入雇员人数信息的那个事务设置 DEADLOCK_PRIORITY to LOW 选项
2
C.为插入雇员姓名和地址信息的那个事务添加一个检查1205服务器错误的条件代码。如果这个错误被遇到,重新
启动该事务。
D.在事务中添加一个ROWLOCK优化提示给SQL数据操作语句。
E.为插入雇员姓名和地址信息的那个事务设置隔离级别给 SERIALIZABLE.
答案: B.
Set deadlock_priority to low可以指定当前事务为首选死锁牺牲品;
错误号1205是事务成为死锁牺牲事务被中止后返回的信息,为插入雇员姓名和地址信息的那个事务添加条件代
码,比较没有效率
4.你是公司的SQL Server 2000在线事务处理数据库的开发者.很多表中有一千甚至更多行。所有的表都有一聚
集索引。大量地访问表至少要有一个非聚集索引。在数据库服务器上数据文件将包含有2个RAID阵列。你想要排
列这些表和索引以确保最佳的输入/输出性能。你在每个RAID阵列上创建一个文件组,你接下来应该做什么?(文
件组管理)
A.把经常连接在一起的表放在同一个文件组中。把大量访问的表和属于这些表的所有索引放在不同的文件组中。
B.把经常连接在一起的表放在同一个文件组中。把大量访问的表和属于这些表的非聚集索引放在同一个文件组
中。
C.把经常连接在一起的表放在不同的文件组中。把大量访问的表和属于这些表的非聚集索引放在不同的文件组
中。
D.把经常连接在一起的表放在不同的文件组中。把大量访问的表和属于这些表的非聚集索引放在同一个文件组
中。
答案: C
为了提高查询效率,将经常查询的表放不同的文件组中,而且将非聚集索引和它的表也放入不同的文件组中。
5. 你是公司SQL Server 2000 数据库的开发者。你更新了数据库里几个存储过程来创建新的月终销售部门的报
表。此存储过程包括综合查询从三个或者更多的数据表中检索数据。所有数据库中的表至少有一个索引。用户反
映新的月终报表比前一个版本的报表运
行速度慢很多。你想改善报表的性能。你该怎么做?
A. 创建一个脚本,包括每个存储过程中的数据定义语言(Data Definition Language),使用这个脚本作为索
引优化向导(Index Tuning Wizard)的工作量文件
B. 在SQL部署跟踪器中捕获每个存储过程的执行,使用跟踪文件作为索引优化向导(Index Tuning Wizard)的
工作量文件
C. 更新存储过程使用的数据表统计索引
D. 在SQL查询分析器中执行每个存储过程,并使用Show Execution Plan选项
E. 在SQL查询分析器中执行每个存储过程,并使用Show Server Trace选项
正确答案:E
"显示服务器跟踪"命令提供了对信息的访问,此信息用于确定查询对服务器方的影响。
如果"显示服务器跟踪"命令在执行查询时启用,则该命令显示跟踪窗格,此窗格提供有关事件类、子类、整型数
据、文本数据、数据库 ID、持续时间、启动时间、读、写以及 CPU 使用的信息。"显示服务器跟踪"可以用来帮
助调整查询语句、存储过程和脚本,显示在查询分析器中。
索引优化向导内容参阅联机丛书。
6.你是一家进口商的数据库管理员,你正在创建一个存储订单信息的数据库。订单将会在一个client/server 应
用系统中录入,每次一个新的订单录入时,必须分配一个唯一的订单编号,订单编号必须以升序分配。每天平均
有10000 个订单被录入。你创建了一个新的名为Orders 的表,并在这个表里添加了一个OrderNumber 列。接下
来你该做什么?(表的属性)
A. 设置这个列的数据类型为uniqueidentifier
B. 设置这个列的数据类型为int,并为这个列设置IDENTITY属性
3
C. 设置这个列的数据类型为int,创建一个用户定义的方法来选择表中最大的订单编号
D. 设置这个列的数据类型为int,创建一个NextKey表,并被这个表添加一个NextOrder列,设置NextOrder列的
数据类型为int,创建一个存储过程来检索并更新NextKey中的值
答案: B.
7.你是一个技术培训中心数据库开发者。通常地,用书面管理雇员的学历、教师、课程和教室安排。这个培训
中心希望通过开发一个数据库录入信息来实现无纸化记录。你为这个数据库设计表,设计如图
你想缩短查询的响应时间和将数据冗余最小化。你应该做什么?(数据库设计)
A.创建一个名为Instructors的新表。包含InstructorID、InstructorName、 OfficePhone等字段,为添加一个
Courses表添加一个名为InstructorID的字段。
B.将Classroom中的所有字段复制到Courses,并删除Classroom表。
C.移除Courses表的主键约束用一个基于CourseID和CourseTitle的主键约束来代替。
D.移除ClassroomID字段,并在ClassroomNumber和ClassTime字段上以主键约束做基础。
答案: A.
8.你设计了一个包含客户订单的数据库。客户每次下订单时都将订购多种的产品。你再观察如图所示的数据库
设计:
你想缩短查询的响应时间和将数据冗余最小化。你应该怎么做?(数据库设计)
A.创建一个新的名为OrderDetail 的订货表,为该表添加OrderID、 ProductID、 Quantity字段。
B.在Orders表的OrderID 、 ProductID字段上创建一个混合的主键约束
C.从Orders表中除去 ProductID、 Quantity 这两个字段.
D.在Orders表的OrderID上创建一个唯一约束.
E.将UnitPrice 这个字段从Products表移动到Orders表.
答案: A, C.
9.您是一出版社公司的数据库开发者。你创建以下存储过程来汇报某本书从年初至今的销售情况
CREATE PROCEDURE get_sales_for_title
@title varchar(80), @ytd_sales int OUTPUT
AS
SELECT @ytd_sales = ytd_sales
FROM titles
4
WHERE title = @title
IF @@ROWCOUNT = 0
RETURN(-1)
ELSE
RETURN(0)
您创建一个脚本来执行这个存储过程。如果该存储过程成功执行,它应报道书的销售情况。如果失败,则将返回
如下信息:
“No Sales Found”
您该怎样创建该脚本?(存储过程)
A. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO
B. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO
C. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’,@retval OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO
D. DECLARE @retval int
DECLARE @ytd int
EXEC @retval = get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO
答案:D
关键点在于要用变量来接受存储过程执行的结果,通过对结果的判断来确定打印出的信息
10.您是一集装箱制造公司的数据库开发者。您的公司生产的集装箱是一些不同型号的。存储集装箱信息的表如
下所示有Size、Container 和Shape 表。数据存储在表中的示例如图所示
5
在表中数据存储的实例如图中资料所示,
集装箱的大小定期地改变。数据库用户经常需要一集装箱的体积。集装箱的体积是根据shape 和size 表中的信息
计算的。您要隐藏计算的详细过程,以使体积可以很容易的从对containe 表的SELECT 语句中得出,你应该做什
么?(存储过程/函数/触发器的不同用法)
A.创建一个以ContainerID 为输入参数并且能够返回集装箱的体积的用户自定义函数。
B.创建一个以ContainerID 为输入参数并且能够返回集装箱的体积的存储过程.
C.为Container 表添加一个名为volume 的字段。创建一个触发器来计算和存储体积当有一个新的集装箱插入表
中的时候.
D.给Container 表添加一个计算列来计算集装箱的体积。
答案: A.
题意关键在于要在查询语句中实现返回体积的结果,只有函数能在查询语句中使用。
11.你是一医院数据库的开发者,医院一共有26 层,每一层有4 个存放设备的房间。你设计一个可处理设备的
控制数据库。某些可处理设备须每次都存储。当使用设备时,就扫描条形码用来减少数据库里的物品的数量。供
应者应在可用设备数量少于设备房间设置的最小值时被呼叫。你该怎么做?
A.创建一个用来更新inventory 表的存储过程。如果结果小于重新储存量,使用xp_logevent 存储过程来呼叫。
B.在inventory 表上创建一个INSTEAD OF UPDATE 触发器。如果inserted 表中的数量小于重新储存量,使用
SQLAgentMail 来发送e-mail 信息给管理者
C.在inventory 表上创建一个FOR UPDATE 触发器. 如果inserted 表中的数量小于重新储存量,使用xp_sendmail
系统存储过程来呼叫。
D.设置SQL server 作业每隔4 小时运行一次, 配置该作业使用the @notify_level_page = 2 argument.配置
该作业让它测试列的大小它将触发供应者被呼叫。
答案: C.
12.您是一数据库的开发者,该数据库用来报告时间。通常平均每次有5 个用户同时访问该数据库,且查询响应
时间小于1 秒钟。然而,在星期五下午和星期一早上,当大多数雇员输入他们的时间 ,该数据库使用率增加到
平均每次50 个用户。在这段时间内,查询响应时间增加到平均15 到20 秒。
您要找到响应速度减慢的原因并解决问题。你该怎么做?(事务和锁的应用)
A.用sp_lock 和sp_who 系统存储过程找出被锁定的资源和占用锁的进程。用这些信息来识别和重设引起锁的事
务。
B.用系统表sysprocesses 和sysobjects 找出死锁的资源并确定访问该资源的进程。
C.用系统表sysprocesses 找出哪个资源正在被访问。在所有被访问的表的主键上添加聚集索引。
D.用sp_monitor 系统存储过程来确认增加的查询时间影响了哪个进程。为该进程设置一个限制性较小的事务隔
离级别。
6
答案: A.
影响查询响应速度的原因在于进程所需的资源被锁,sp_lock 可以索取锁的信息,sp_who 可以列出当前进程信息
13.你是一家保险公司的数据库开发人员,公司有一个多层应用系统用来录入关于公司保险单和保险单所有者的
数据。保险单所有者信息存储在Owners 表中,用来创建这个表的脚本如下所示:
CREATE TABLE Owners
(
OwnerID int IDENTITY (1, 1) NOT NULL,
FirstName char(20) NULL,
LastName char(30) NULL,
BirthDate date NULL,
CONSTRAINT PK_Owners PRIMARY KEY (Owner ID)
)
当保险单所有者的信息被录入时,如果所有者的出生日期没有被包括进来;数据库需要
产生一个自定义的错误信息在数据录入系统中显示。你需要为数据库设计一个方法能够
确认出生日期被提供,并在没有提供出生日期时产生一个错误,你该怎么做?
A. 在BirthDate 列添加一个CHECK约束
B. 创建一个规则,并把这个规则和BirthDate 列绑定
C. 修改Owners表,使BirthDate 列不允许为空
D. 为Owners 表创建一个触发器,使BirthDate 列有效
答案: D.
CHECK 约束/规则都无法产生错误的信息项目,只有触发器可以。
14.你是一家大型brewery 的数据库开发人员 。每一家工厂和设备的信息存储在一个名为Equipment 的数据库
中. 这工厂的信息存放在一张名为Location 的表中,设备的信息存放在一张名为Parts 的表中。用来创建这些表
所使用的脚本如下所示:
CREATE TABLE Location
(
LocationID int NOT NULL,
LocationName char (30) NOT NULL UNIQUE,
CONSTRAINT PK_Location PRIMARY KEY (LocationID)
)
CREATE TABLE Parts
(
PartID int NOT NULL,
LocationID int NOT NULL,
PartName char (30) NOT NULL,
CONSTRAINT PK_Parts PRIMARY KEY (PartID),
CONSTRAINT FK_PartsLocation FOREIGN KEY (Location ID)
REFERENCES Location (LocationID)
)
The brewery可以用来关闭一些现有的工厂和打开一些新的工厂。当一家工厂被关闭时,有关工厂和所有设备的信
息将从数据库中删除。你创建一个存储过程来完成这个操作。名为sp_DeleteLocation 存储过程如下所示:
CREATE PROCEDURE sp_DeleteLocation @LocName char(30)
AS BEGIN
DECLARE @PartID int
DECLARE crs_Parts CURSOR FOR
7
SELECT p.PartID
FROM Parts AS p INNER JOIN Location AS 1
ON p.LocationID = l.LocationID
WHERE l.LocationName = @LocName
OPEN crs_Parts
FETCH NEXT FROM crs_Parts INTO @PartID
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DELETE Parts WHERE CURRENT OF crs_Parts
FETCH NEXT FROM crs_Parts INTO @PartID
END
CLOSE crs_Parts
DEALLOCATE crs_Parts
DELETE Location WHERE LocationName = @LocName
END
这个存储过程将要花费比想像中还要长的时间来执行。 你需要减少这个存储过程的执行时间,你该怎么做?(游
标的使用)
A. 在定义过程中 添加 WITH RECOMPILE 选项 .
B. 用单一的DELETE 语句取代游标操作
C. 在过程的开头添加一个 BEGIN TRAN 语句并在过程的结尾添加 COMMIT TRAN 语句
D. 为这个过程设置事务处理隔离级别 READ UNCOMMITTED
E. 为 Parts 表的 PartID 字段添加一个非聚集索引.
答案: B.
游标操作是在使用查询语句多个结果集中的一个值的时候起作用,它将耗费大量的时间,本题完全可以用两句
DELETE 语句就将Location表和part表删除。无需使用游标
15.你是一家保险公司的数据库开发者,公司的保险单信息存储在一个SQL Server 2000
数据库中,你使用如下所示的脚本为数据库创建了一个名为Policy 的表:
CREATE TABLE Policy
(PolicyNumber int NOT NULL DEFAULT (0),
InsuredLastName char (30) NOT NULL,
InsuredFirstName char (20) NOT NULL,
InsuredBirthDate datetime NOT NULL,
PolicyDate datetime NOT NULL,
FaceAmount money NOT NULL,
CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber))
每次公司卖出一份新的保险单时,policy表就要增加一条记录,并赋予其一个新的保单号,你将怎么做?
A. 创建一个INSTEAD OF INSERT触发器来产生一个新的保单号,并把这保单号插入到表中
B. 创建一个INSTEAD OF UPDATE触发器来产生一个新的保单号,并把这保单号插入到表中
C. 创建一个AFTER UPDATE触发器来产生一个新的保单号,并把这保单号插入到表中
D. 用AFTER INSERT 触发器来代替DEFAULT约束,产生一个新的保单号,并把这保单号插入到表中
答案: A
16.你是一家通讯公司的数据库开发队的一个成员。 在队上的另外一个开发者 , Marc,在一个名为Corporate
的数据库中创建了一张名为Customers 的表。因为表包含机密的信息, 他已经授权允许查询该表的只有队里的其
他成员。你正在开发一个应用程序用来允许销售部门的职员查看Customers表的一些信息。 这些职员是销售数据
库角色的所有成员。 为了支持这一个应用程序,你在Customers表上创建一个被命名的 vwCustomers 的视图。 在
8
创建视图之后,你授权具有销售角色的成员允许查询。当销售角色的成员尝试从视图中取回数据的时候,他们接收
以下错误信息:
SELECT permission denied on object ‘Customers’, database ‘Corporate’, owner‘Marc’.
你必须确定具有销售角色的成员只能使用 vwCustomers 视图来访问 Customers 表的数据。 你应该做什么?(用
户角色管理)
A. 添加一个销售角色到固定的系统管理员服务器角色中。
B. 将 vwCustomers 视图的所有权转移到销售角色中。
C. 通知Marc将Customers表的所有权转移给销售角色的每个成员。
D. 通知Marc授予用户查询Customers表的许可。
E. 删除 vwCustomers 视图。 通知Marc重建视图并且授予销售角色的用户查询视图的权限。
答案: E.
这是一个破坏所有权链的例子,curstomers 表的所有者是Marc,视图vwCustomers 的所有者是我,我创建的视图
依赖Marc 拥有的curstomers 表。此时如果Marc 没有开放curstomers 表的权限,则我授权的销售角色也将无法
使用视图。
17.你正在为你的公司设计一个SQL Server 2000销售数据库,它能够被客户端的应用程序访问。客服人员和销售
人员对数据库中的所有表格应具有插入,删除和查询的权限。另外,使用客户端程序时候,销售人员将由会把数
据库中的表通过Excel导出成图表。客服人员属于Windows 2000中的名字叫CSR的组。销售人员属于Windows 2000
中的名字叫Marketing的组。你只允许客服人员通过客户端应用程序访问数据库,你又允许销售人员通过客户端
应用程序和Excel访问数据库。在数据库中没有授予任何许可权。你该怎么做呢?(应用程序角色的使用)
A.为销售人员创建数据库角色Marketing,为客服人员上创建角色CustomerService,添加windows2000组到用户定
义角色上,分配SELECT所有表的权限给Marketing角色,分配SELECT, INSERT, and UPDATE所有表的权限给
CustomerService角色。
B.创建一个被客服人员与销售人员共有的应用程序角色,分配查询所有表的权限给windows2000 Marketing组,分
配SELECT, INSERT, and UPDATE所有表的权限给windows 2000CSR组。
C. 为客户应用程序创建一个应用程序角色,授予 这个应用程序角色SELECT, INSERT and UPDATE 权限 。为
marketing 雇员创建一个叫Marketing 的数据库角色。添加Windows 2000 Marketing 组到Marketing数据库角色。
分配Marketing 数据库角色有查询数据库中的所有表的权限。
D.为客服人员创建一个应用程序角色,为销售人员创建另一个应用程序角色,分配SELECT所有表的权限给销售
人员角色,分配SELECT, INSERT, and UPDATE权限给客服人员角色。
答案: C.
这道题有两个任务,一是限制客服人员只能通过客户端应用程序访问数据库,二是允许销售人员通过客户端应用
程序和EXCEL程序来访问数据库,
使用应用程序角色可以实现用户只能通过特定应用程序(例如使用Microsoft Excel)来访问数据或防止用户直接
访问数据,限制用户的这种访问方式将禁止用户使用SQL Server应用程序(如 SQL 查询分析器)连接到 SQL
Server 实例。
18.你是某在线书籍零售数据库的开发人员,客户使用公司的web 站点来放置书籍订单。在订单被录入后,它们
就被插入到BookOrders 数据库中。在每晚的批处理过程中,订单的信息转移到Reports 数据库中。Reports 数
据库包括一个Order 表和一个LineItem表,Order 表包括关于订单的基本信息,LineItem 表包括订单中个别项
的信息。Order表和LineItem 表如下所示:
9
客户必须使用公司的web 站点来浏览存储在Reports 数据库中的订单。客户应该只能看
到他们自己的订单,但不能修改这些订单。订单的主键值和客户是不相关的,并且是不
可见的,你应该怎么做呢?(视图、存储过程、函数的比较)
A.创建一个视图显示 ORDER 表的客户信息
B.创建一个存储过程检索 ORDER 表的客户信息
C.创建一个用户自定义标量函数来检索ORDER的客户信息
D.授予客户对 Order 表和 LineItem 表的查询权限
答案: B.
使用视图,用户可以删除或修改客户信息;标量函数返回的是一个单值,我们需要的是一系列的信息,包括
OrderDate, ProductID and Price;授予用户对表的查询权限也能使得用户查看到其他用户的信息,只有使用存
储过程才可以显示相应客户的订单信息
CREATE PROCEDURE CustomerInfo (@CustID as Integer)
AS
SELECT OrderDate, ProductID, Price
FROM Order INNER JOIN LineItem
ON Order.OrderID = LineItem.OrderID
WHERE Order.CustomerID=@CustID
19.你是一家大型旅行公司的数据库开发者。关于公司每个部门的信息都被储存在一个名叫Department的表中。
关于公司的每个旅行社代理商和部门经理的信息被储存在一张Employeest的表中。SQLLogin列表示旅行社代理
商和部门经理在数据库中的登陆信息,Department和Employees表将被给出。每个部门经理将被授予数据库管理
者的角色。
你需要使得这个数据库角色的所有成员能够看到department表中的所有数据并且这个角色的成员只能对
department表中的属于他自己的部门的行进行插入和更新操作。你已经授予了这个数据库管理角色选择的权限,
接下来你要做什么?(视图的查询和更新)
A.在Department表上创建一个触发器,来登记部门成员数据库登陆用户实行插入或更新操作是否属于这个部门
成员
B.创建一个视图包括Department表的所有列和Employees表的SQLLogin列
在视图定义中包含 WITH CHECK OPTION项。
C.授予Department表的插入和更新权限.
D.授予Employees表的SQLLogin列插入和更新权限.
答案: B.
CREATE VIEW Solution AS
SELECT DepartmentID, DepartmentName, TotalBudget, SQLLogin
FROM Department INNER JOIN Employees
ON Department.DepartmentID = Emplyees.DepartmentID
WHERE SQLLogin = USER_NAME()
WITH CHECK OPTION
USER_NAME() 是取出当前用户登录名的函数.要求管理者的更新必须是对自己本部门的数据,所以使用with
check option选项。
10
20.你是你们公司销售数据库的开发者。这个数据库有个名字叫Order 的表。创建表的脚本如下:
CREATE TABLE Orders
(OrderID int NOT NULL,
CustomerID char (5) NOT NULL,
OrderDate datetime DEFAULT GETDATE ( ) NULL,
ShippedDate datetime NULL,
Freight money NULL,
ShipName varchar (40) NULL)
GO
CREATE CLUSTERED INDEX IX_OrderID ON Orders (OrderID)
GO
CREATE NONCLUSTERED INDEX IX_CustomerID ON Orders (CustomerID)
应用程序将为顾客执行下面的查询语句:
SELECT OrderID, CustomerID, OrderDate
FROM Orders WHERE CustomerID = ‘WHITC’
ORDER BY OrderDate DESC
产生的查询实行计划如查询实行计划展览品中所示。
查询实行计划:
为了使这个查询语句效率高点。你应该作什么?(查询性能)
A.在 OrderDate上创建非聚集索引
B.在OrderDate上创建一个聚集索引.
C.把 OrderID 上的群集索引换成非聚集索引
D.把OrderDate添加到CustomerID的非聚集索引中
答案: D.
在这个查询的运行过程中,做了两个操作,利用非聚集索引ix_customerid 对customerid 的查询,耗费的成本的
2%;利用聚集索引查找orderdate,耗费成本的94%,应该将对orderdate 的非索引结构进行改变,添加到非聚
集索引中
21.你正在为你的公司设计一个SQL Server 2000 销售数据库,你们公司有很多基于网络的应用程序,它们要从
销售数据库提取数据。其中的一些应用程序通过EXECUTE 语句来进行相应的查询操作。随着使用网络型应用
程序的增加。查询将需要更长的时间来执行。如果你要开发一个能够传送大量查询语句给服务器的网络应用程
序。你要做什么?(事件探查器)
A. 用SQL profiler去捕获RPC:Completed 事件,通过主机名数据列分类跟踪
B. 用SQL profiler去捕获SQL:StmtCompleted 事件.通过应用程序名数据列分类跟踪
C. 用系统监视器监视 SQLServer:Database counter.返回Sales数据库的统计信息
D. 用系统监视器监视 SQLServer:General Statistics counter. 返回Sales数据库的统计信息
答案: B.
SQL profiler 是一个图形工具,使系统管理员得以监视SQL Server 实例中的事件。可以捕获有关每个事件的数
据并将其保存到文件或 SQL Server 表中供以后分析。例如,可以对生产环境进行监视,了解执行速度太慢而
11
妨碍性能的存储过程。通过监视 TSQL 事件类并通过单步跟踪监视事件,可以监视应用程序查询。事件类
SQL:StmtCompleted 显示批处理内的已完成的语句
(事件探查器的演示)
22.你是一家跨国公司数据库开发人员,公司在SQL Server 2000 计算机上有一个集中式在线事务处理数据库。
这个数据库有一个名为Sales 表,包括公司办事处统一整理过的销售信息。去年,150,000 多行的数据被添加
到Sales 表中,数据库用户反映随着年限的增长,数据库的性能在平稳地下降。你需要改善Sales 表查询的性
能。在SQL 查询分析器中你该执行哪个脚本?
A. EXEC sp_updatestats 'resample'
B. CREATE STATISTICS Sales WITH FULLSCAN
C. Sp_autostats ‘Sales’
D. UPDATE STATISTICS Sales WITH FULLSCAN ALL
答案: A.
SQL Server 允许创建有关值在列中的分布情况的统计信息,该统计信息可供查询处理器用来确定最佳的查询评
估策略。在创建索引时,SQL Server 会自动存储有关值在索引列中的分布情况的统计信息。SQL Server 中的
查询优化器使用这些统计信息估算使用该索引进行查询的成本。随着列中数据的更改,索引和列的统计信息可
能会过时,导致查询优化器选择的查询处理方法不是最佳的。
本题中由于添加了多行数据,所以对于统计信息要么重新创建,要么要进行更新。
sp_updatestats 'resample'对当前数据库中所有用户定义的表运行 UPDATE STATISTICS,继承旧统计表的采样
比率;
CREATE STATISTICS statistics_name ON Sales (SalesID) WITH FULLSCAN;
显示或更改索引或统计的自动 UPDATE STATISTICS 设置;
UPDATE STATISTICS Sales WITH FULLSCAN, ALL
23.你是一个SQL Server 2000的在线交易处理的数据库的开发者。你写了许多存储过程来产生严格的报表。这
些存储过程能够访问存在的且带有索引的数据表。你在生产环境中运行存储过程之前,你要确定存储过程的性
能比较的优越,你也要确定对数据库的日常操作没有受到不利的影响。你应该做什么?(索引优化向导的功能)
A. 为包含在存储过程中的每个查询创建一个覆盖索引
B. 为存储过程的每个查询创建一个包含WHERE子句的每个列的索引
C.从索引优化向导中用输出来确认索引是否应该被添加。
D.在SELECT 和 WHERE 项的每个分析在所有列中创建一个统计表.
答案: C.
一方面使得存储过程的性能比较优越的方法是添加一定数量的索引,而这会造成对数据库的插入和更新操作受
到影响,使用索引优化向导可以解决这些矛盾,达到平衡
(索引优化向导的演示)
24.你是一家保险公司的数据库开发人员,你被告知数据库操作例如selects, inserts 和updates 都比一年前
刚创建时花费的时间长。以前的开发人员在数据库创建时给表添加了所需的索引。自从那以后,其他的表和存
储过程被添加到数据库中。除此之外,很多查询不再使用。你想改善数据库,使其有尽可能快的响应数度。你
该做什么?
A. 对数据库执行DBCC UPDATEUSAGE语句来更新sysindexes系统表
B. 执行DBCC SHOW_STATISTICS语句找出高密度索引(high-density indexes),删除
这个索引
C. 对工作负荷(workload)文件运行索引调整向导(Index Tuning Wizard),来创建和
删除暗示的索引
12
D. 使用SQL部署器找出表扫描(table scan),并给有表扫描的数据表添加索引
答案: C.
25.你是一家运动商品公司的数据库开发者。 公司有一个主办公室和多个横穿美国的地方办公室。用一个
56-Kbps 的架构继电器网络来连接各个办公室, 每个办公室有一个包含公司的产品资讯的 SQL Server 2000 数
据库。主办公室的SQL Server 数据库用来处理对地方办公室数据库的逐渐增加的更新,用事务响应来运行这些
更新。在每一季,你创建一个新的快照文件,使用这个快照文件来代替地方的办公室的最新产品信息的数据库。
这个快照文件现在超过800MB,你将快照文件应用到地方的办公室的数据库中,要使用最少量的费用来完成这
项任务。你应该怎么做?(数据复制)
A. 使用事务复制。为重新初始化做特定的标记 。
B.拷贝快照到压缩共享的 NTFS 卷中。从共享的NTFS 上创建一个CD。分发该CD 到地方
办公室。
C.在分配器上的默认快照文件夹中创建一个压缩的快照。从那个文件夹中创建CD。把CD 分配到该地方的办公
室。
D.在网络上的一个其它的快照文件夹中创建一个压缩的快照。
从那个文件夹中创建CD。分配该CD 到地方的办公室。
E.在网络上的一个其它的快照文件夹中创建一个压缩的快照。使用 FTP 将快照分配到地方办公室。
答案:D
快照复制将数据以特定时刻的当时状态分发,不监视对数据的更新。对于复制不经常更改的数据,或不要求保
持数据最新值的情况,快照复制是一种最好的数据复制方法。
发布服务器是提供数据以便复制到其它服务器的服务器。
分发服务器是包含分发数据库并存储元数据、历史数据和/或事务的服务器
订阅服务器是接收复制数据的服务器。
当快照文件太大以致于可移动媒体无法装下,或者需要通过较慢的网络进行传输时,可以选择对快照文件进行
压缩。
在分发服务器上,不能压缩已写入默认快照文件夹的快照文件。
13
26.你是某公司SQL Server 2000 数据库的开发人员,这个数据库包括一个Sales 表,此表有2 百万行。Sales
表包括公司所有部门的销售信息。每个部门通过表中的DepartmentID列进行识别。大多数对表的查询都是为了
查找某个单独部门的销售信息,你想提高这些查询的I/O 性能。然而,你不想影响访问表的应用程序,你该怎
么做?
A. 创建一个新表,把经常查找的列移到此表中,将DepartmentID列保留在两个表中,创建一个原始表和新表的
视图,在新表的连接(join)列添加外键(FOREIGN KEY)约束
B. 创建一个新的表,把经常查找的列移到此表中,将DepartmentID列保留在两个表中,创建一个原始表和新表
的视图,在两个表的DepartmentID列添加CHECK约束
C. 为每个部门创建一个新的表,把每个部门的销售信息移到部门表中,为新表的DepartmentID 列添加一个
CHECK 约束,为新的表创建一个视图
D. 为每个部门创建一个新的表,并把每个部门的销售信息移到部门表中,创建一个新表的视图,给视图的
DepartmentID 列添加一个CHECK约束
E. 创建一个存储过程来接收一个部门输入的参数,使用存储过程返回Sales 表的结果
答案:C
将表的数据按部门号进行分隔,可以提高查询性能
27.你是你公司SQL SERVER 2000 数据库的数据库开发者。你正在删除数据库不会再使用的对象。你无法删
除视图1997Sales。经过调查你发现该视图有如下特性:
(1) 该视图有一聚集索引
(2) sales 数据库角色有该视图的权限
(3)该视图有WITH SCHEMABINDING 选项
(4)该视图有一个在线参考模式
(5)该视图上定义了一个INSTEAD OF 触发器
在删除该视图前你该做什么?
A.删除该视图上的聚集索引
B.除去该视图上所有权限
C.除去该视图上的WITH SCHEMABINDING 选项
D.除去参考该视图的函数上的WITH SCHEMABINDING 选项
E.禁用该视图上的INSTEAD OF 触发器
答案:D
课本426 页,创建函数支持架构绑定,可以把函数绑定到它所引用的对象上,如表、视图等,一旦绑定,则被
绑定的对象不能被删除。
28.你是一家公司的数据库开发人员,你正在为公司创建一个名为HumanResources的数据
库。这个数据库包含了员工的档案和人口统计的信息。公司有2000个员工,每年的人员
流动率为2%,当员工离开公司后,所有关于他的记录都被保留做审核用,员工的人口
统计信息年变化率为9%,你不需要保留人口统计变化的历史记录。人力资源数据库架
构如下的HumanResources Schema所示,下面的脚本将被使用来创建索引。
14
用于创建索引的脚本显示如下:
ALTER TABLE [dbo].[Employee] WITH NOCHECK ADD
CONSTRAINT [pk_Employee] PRIMARY KEY CLUSTERED
([EmployeeID])
WITH FILLFACTOR = 90
GO
ALTER TABLE [dbo].[EmployeeDemographics] WITH NOCHECK ADD
CONSTRAINT [dbo].[EmployeeDemographics] PRIMARY KEY CLUSTERED
([EmployeeID])
WITH FILLFACTOR = 90
GO
你想保存磁盘空间并最小化扩展数据库文件的次数。所有的varchar列都是50%的占用
状况。你该为CREATE DATABASE语句指定哪两个参数?(选择两个正确的答案)
A. SIZE = 1GB
B. SIZE = 1MB
C. SIZE= 2048KB
D. FILEGROWTH = 20
E. FILEGROWTH = 5%
F.FILEGROWTH = 0
答案:C ,E
对于数据库初始容量的判断:基于model数据库的数据大约有1M,预估用户数据大约也有1M
EmployeeDemographics一行大约有110字节,Employee表一行大约有105字节,
所有的数据总量应该是(110+105)×2000 =450,000byte,占用空间450,000/0.9=0.5M
29.你是公司sql server 2000数据库的开发者。这个数据库包含一个名为products表格和一个名为companies的表
格。你需要从一个连接服务器插入新的产品信息到products表格中。这个产品表格有个外键是参照companies表
格的主键的约束。在products表格上定义了一个更新触发器。你需要尽可能快的装载数据。你该怎么做?
A.使用 alter table 语句和 on update 项目来修改 products 表格。
B.使用 alter table 语句和禁用触发器的所有选项来修改 products 表格 。
C.使用 alter table 语句和禁用触发器的所有选项来修改 companies 表格 。
D.使用 alter table 语句和 nocheck constraint 选项来修改 companies 表格 。
E.使用 alter table 语句和 nocheck constraint 选项来修改 products 表格。
15
答案:E
从连接服务器上尽可能快的添加记录,但由于产品表参照公司表中的值,所以每个插入的行都要进行外键检查,
会影响插入的速度,可以进行禁用外键约束的办法。
30.你是公司会计数据库的开发者。数据库包含一个名叫Employees 的表。Tom 是会计部门的一个成员。Tom
的数据库用户帐户对表Employees 里的列Salary 和BonusPercentage 的SELECT 权限被拒绝,被授予对其他列
的SELECT 权限。Tom 现在要求访问Employees 表里的所有数据。你该怎么做?
A.废除Tom 数据库用户帐户对表Employees 里的列Salary 和BonusPercentage 的SELECT 权限
B.添加Tom 到db_datareader 角色
C.添加Tom 到db_accessadmin 角色
D.授予Tom 数据库用户帐户对表Employees 里的列Salary 和BonusPercentage 的SELECT 权限。
答案:D
31.你是一个玩具制造厂商的数据库开发者。公司里的成员有主管,管理阶层以及职员。公司内部网络首页根
据职位显示了相应的公司信息。当有一员工登陆到公司内部网时,首页验证职工的身份然后根据他的职位显示
公司的信息。公司信息保存在库corporate 里的News 表中,创建新数据库表的语句如下所示:
CREATE TABLE News
(
NewsID int NOT NULL,
NewsText varchar (8000) NOT NULL,
EmployeePositionType char (15) NOT NULL,
DisplayUntil datetime NOT NULL,
DateAdded datetime NOT NULL DEFAULT (getdate( )),
CONSTRAINT PK_News PRIMARY KEY (NewsID)
)
企业内部网的用户需访问News 表,但不能插入、更新或删除表里的数据。你基于你的职位 要将发布信息传递
到企业内部网。你该怎么做?
A.创建一个视图返回那些应用于特殊职位的行
B.创建一个存储过程返回那些应用于特殊职位的行
C.授予每个职位对列EmployeePositionType 的SELECT 权限
D.授予每个职位对表News 的SELECT 权限
答案:B
CREATE PROCEDURE NewsEmpType (@EmpType char(15))
AS
SELECT NewsText
FROM News
WHERE EmployeePositionType=@EmpType
32.你是一个生产在线电话目录的公司的数据库开发者。
有个名为phonenumbers 的表格展示如下。
16
在载入100,000 个name 到表格,你通过下面的脚本创建索引。
ALTER TABLE [dbo]. [PhoneNumbers] WITH NOCHECK ADD
CONSTRAINT[PK_PhoneNumbers]PRIMARY KEY CLUSTERED (
[FirstName],[LastName]) ON [PRIMARY]
GO
CREATE UNIQUE INDEX
[IX_PhoneNumbers] ON [dbo].[PhoneNumbers]([PhoneNumberID]) ON
[PRIMARY]
GO
你检验数据库的反应。你发现下面的查询要花费长时间来运行。为生活
在某一特定城市和last name以w开始的人返回所有的名字和电话号码。你
该如何改进该查询语句。(选2)(索引的应用)
A.更改主键的约束,用firstname跟随在lastname列后。
B.在city列上添加一个非聚集索引。
C.在areacode,exchange,和number列上创建非聚集索引。
D.删除phonenumberid列上的唯一索引。
E.更改主键约束,换成非聚集索引。
F.在查询分析器中执行更新统计扫描所有的语句。
答案: A,B
查询语句如下:
SELECT FirstName, LastName, PhoneNumberID FROM PhoneNumbers
WHERE City=[certain city] AND LastName LIKE ‘W%’
参与查询的列是lastname 和city,对于组合索引来说,第一列一般要用在where子句中,第一列被定义成最高顺序

33.你是一个保险公司的数据库开发者.你正在SQL 的查询分析器中优化查询性能。 在查询窗口中,你创建如
下的查询语句:
SELECT P.PolicyNumber, P.IssueState, AP.Agent
FROM Policy AS P JOIN AgentPolicy AS AP
ON (P.PolicyNumber = AP.PolicyNumber)
WHERE IssueState = ‘IL’
AND PolicyDate BETWEEN ‘1/1/2000’ AND ‘3/1/2000’
AND FaceAmount > 1000000
你从查询菜单中选择“显示评估执行计划”选项并执行查询产生,查询执行计划被创造并显示在评估计划的图示
中。
PhoneNumbers
PhoneNumberID
AreaCode
Exchange
Number
Z LastName
Z FirstName
StreetAddress
City
State
PostalCode
17
你将要做什么?
A .重写查询语句删除BETWEEN 关键字
B .添加一个包含HASH 选项的一个连接提示到查询中
C 添加一个WITH (INDEX (0) )的表提示到Policy 的表中
D 更新在Policy 的表中的统计信息
E 执行在Policy 的表中DBCC DBREINDEX 语句
答案: D
34.你是SQL Server 2000 数据库开发者,你正计划添加新的索引,删除一些索引,并改变
其他索引为复合索引和覆盖索引。由于归档要求,你必须生成一个报表,此报表显示了
你做出修改前后查询所用到的索引。你该怎么做?
A. 在SQL查询分析器中执行每个查询,并使用SHOWPLAN_TEXT选项。将输出作为报表
B. 在SQL查询分析器中执行每个查询,并使用Show Execution Plan选项。将输出作为
报表
C. 对工作量文件(Workload file)执行索引调整向导(Index Tuning Wizard),将
输出作为报表
D. 执行DBCC SHOW_STATISTICS语句,将输出作为报表
答案: A.
SHOWPLAN_TEXT 选项使得不执行 Transact-SQL 语句,SQL Server 返回有关如何执行语句的详细信息。
35.你是一个医院数据库的开发者,这个数据库包含医生和病人的信息。这个数据库将包含一个名为Physicians
和一个名为Patients 的表。医生治疗多个病人。病人通常有一个主治医生和一个辅助医生。主治医生被指定作
为主治医生。病人的表包含不多于百万行。
你想在当从表中查询数据时增加I/O 性能,数据库应该被标准化以达到第三范式。
你应该使用哪种脚本来创建表?(关系模型设计)
A. CREATE TABLE Physicians
(Physicians ID int NOT NULL CONSTRAINT PK_Physicians PRIMARY KEY CLUSTERED,
LastName varchar(25) NOT NULL)
GO
18
CREATE TABLE Patients
(PatientID bigint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL,
PrimaryPhysician int NOT NULL,
SecondaryPhysician int NOT NULL,
CONSTRAINT PK_Patients_Physicians1 FOREIGN KEY (PrimaryPhysician) REFERENCES Physicians
(PhysicianID),
CONSTRAINT PK_Patients_Physicians2 FOREIGN KEY (SecondaryPhysician) REFERENCES Physicians
(PhysicianID))
B. CREATE TABLE Patients
(PatientID smallint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,
LastName varchar(25) NOT NULL,
FirstName varchar (25) NOT NULL,
PrimaryPhysician int NOT NULL,
SecondaryPhysician int NOT NULL)
GO
CREATE TABLE Physicians
(PhysicianID smallint NOT NULL CONSTRAINT PK_Physicians PRIMARY KEY CLUSTERED,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL,
CONSTRAINT PK_Physicians_Patients FOREIGN KEY (PhysicianID) REFERENCES Patients
(PatientID))
C. CREATE TABLE Patients
(PatientID bigint NOT NULL CONSTRAINT PK_Patients PRIMARY KEY CLUSTERED,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL)
GO
CREATE TABLE Physicians
(PhysicianID int NOT NULL CONSTRAINT PK_Physician PRIMARY KEY CLUSTERED,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL)
GO
CREATE TABLE PatientPhysician
(PatientPhysicianID bigint NOT NULL CONSTRAINT PK_PatientsPhysicians PRIMARY KEY
CLUSTERED,
PhysicianID int NOT NULL,
PatientID bigint NOT NULL,
PrimaryPhysician bit NOT NULL,
FOREIGN KEY (PhysicianID) REFERENCES Physicians (PhysicianID),
FOREIGN KEY (PatientID) REFERENCES Patients (PatientID))
D. CREATE TABLE Patients
(PatientID int NOT NULL PRIMARY KEY,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL)
GO
CREATE TABLE Physicians
19
(PhysicianID int NOT NULL PRIMARY KEY,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL)
GO
CREATE TABLE PatientPhysician
(PhysicianID int NOT NULL REFERENCES Physicians (PhysicianID),
PatientID int NOT NULL REFERENCES Patients (PatientID),
PrimaryPhysician bit NOT NULL,
CONSTRAINT PK_PatientsPhysicians PRIMARY KEY (PhysicianID, PatientID))
答案: D.
医生和病人是多对多联系,所以必须创建PatientPhysician 表来描述病人和医生之间的联系情况,将多对多联系
转换成两个一对多联系,选择数据类型的关键,表的行数不超过2 百万,所以可以为主键选择int 型,它的最大
数量可达2,147,483,647
36.你是某公司SQL Server 2000 数据库的开发人员,这个数据库包括一个名为Invoices
的表,你是db_owner 角色的一员。Eric 是HR 数据库角色的一员,她为Invoices 表创
建了Trey_Research_UpdateInvoices 触发器。Eric 现在离职了,因此这个触发器也不
再需要。你在Sales 数据库中执行了以下的语句来删除此触发器:
DROP TRIGGER Trey_Research_UpdateInvoices
然后你得到了如下的错误信息:
Cannot drop the trigger ‘Trey_Research_UpdateInvoices’, because it does not
exist in the system catalog.
在你能够删除触发器前你该做什么?
A. 把你的登录名添加到HR数据库角色中
B. 在DROP TRIGGER语句中用触发器所有者来限制触发器名字
C. 在执行DROP TRIGGER语句之前禁用触发器
D. 在DROP TRIGGER语句中定义触发器数量
E. 在sysobjects 和syscomments 系统表中移除触发器文本
答案 : B
默认情况下删除触发器的权限是触发器所在表的所有者,但固定数据库角色db_owner、db_ddladmin 以及固定
服务器角色的成员都可以执行删除触发器的语句,如果你是固定数据库角色的成员,可以通过在语句中指定所有
者来实现删除
37.你设计一个用于购买音乐会门票的站点数据库,在购票的过程,用户先查看余票的列表以决定他是否要买
票。余票的列表对应一个游标。 对于流行的音乐会,成千上万的购买者会在同一时间试图去购买票。由于这个
原因,你必须允许尽量多的人在同一时间访问数据。你应该如何设计游标?
A 创建一个游标包含在显式事务,并设置事务隔离级别在Repeatableread
B 创建一个使用乐观并发游标并定位更新。在游标中,放置立即更新语句在显式事务中
C 创建一个使用乐观并发游标。在游标中,使用UPDATE 语句详细说明在WHERE 语句中需要被更新的关键
行,并把UPDATE 语句放置到隐性事务中
D 创建一个使用定位更新的游标。并且在游标的定义中使用包含SCROLL_LOCKS辅助信息来强迫执行悲观并
发。在游标中,在隐性事务游标中放置定位更新。
答案: B.
在使用游标是有两个选项,乐观并发optimistic concurrency和悲观并发pessimistic concurrency;
20
若用户使用乐观并发选项打开游标,没有锁控制其中的行,这将有助于最大化其处理能力。
SCROLL LOCKS选项实现悲观并发控制,在把数据库的行读入游标结果集时,应用程序将试图锁定数据库行。
阻止任何其它任务获取更新锁或排它锁,从而阻止其它任务更新该行。
38.你是一家公司的数据库开发人员,该公司正在进行一项消费者音乐喜好的电话调查,当调查参与者的调查
结果被反馈回来时,这些调查信息就会被插入到表SurveyData 中。当所有的调查信息都收回后,调查结果的概
要就产生了。你被要求通过取样每五行的调查信息来创建一个概要。你需要尽可能快的产生概要,你该怎么做?
A. 使用游标来检索所有的调查数据,使用FETCH RELATIVE 5语句从游标中选择概要
数据
B. 使用SELECT INTO语句来检索调查数据到临时表中,使用SELECT TOP 1语句从临时
表中检索第一行
C. 设置查询的行数为5,使用一个SELECT语句来检索和总结调查数据
D. 使用SELECT TOP 5语句来检索并总结调查数据
答案: A.
FETCH RELATIVE 5是在当前游标中提取出相对于当前行的后(前)5行,并将游标指针转移到提取行上。
39.你是一家木材公司的数据库开发者。 你正在执行一个移动的操作从一个平面文件数据库到 SQL Server
2000 。你将平面文件数据库输出到定义了逗号格式的文本文件中.文本文件在输入文件展示按钮中被显示。
1111, ‘*4 Interior’, 4, ‘Interior Lumber’, 1.12
1112, ‘2*4 Exterior’, 5, ‘Exterior Lumbar’, 1.87
2001, ‘16d galvanized’,2, ‘Bulk Nails’, 2.02
2221, ‘8d Finishing brads’,3, ‘Nails’, 0.01
你需要把这个文件输入到表名为 Product和tegory的 SQL Server表中,Product 和 Category表如图所示:
你想要使用最少量的管理工作来输入数据。 你应该做什么?(数据转换服务)
A. 使用 bcp 实用程序, 而且指定-t 选项。
B. 使用大容量插入语句, 而且指定 FIRE_TRIGGERS
C. 使用 SQL- DMO BulkCopy2 对象而且设置TableLock 属性为TURE。
D. 使用数据转换服务创建两个个数据转换任务。对于每个任务,把文本文件那一列映射到数据库列中。
答案: D.
要将文本文件中的数据导入到SQL Server表中,并且还要将关联数据映象到联接的表中,只能采用数据转换服
务,创建两个转换任务。
bcp 实用工具是用在数据文件之间以用户指定的格式复制数据
40.你是Woodgrove银行中一个名为Account数据库的开发者。一位开发人员为银行创建了一个多层的应用程序。
银行的职员将使用这个应用程序来管理用户帐户。开发者需要从accounts数据库检索客户名字放到应用程序的
下拉列表框中。 应用程序的用户将会使用列表框找出客户帐户。数据库包含超过 50,000个客户帐户,开发者
想要通过列表框只取回 25行作为使用者的目录。 当前用户应在任何时候得到这个目录。当执行drop-down 列
表时, 你需要为开发者推荐一个使用策略。你应该推荐什么?(API服务器游标)
A. 创建一个存储过程来取得要被载入表格的数据。
21
B. 使用一个 API server-side游标(API服务器游标)取回要被载入表格的数据。
C. 使用SELECT语句立刻取回所有的数据, 然后将数据载入表格之内。
D. 使用 SQL事务 server-side游标检索被载入表格的数据。
答案: B.
使用API服务器游标,支持 OLE DB、ODBC 和 DB-Library 中的 API 游标函数。API 服务器游标在服务器上实
现。每次客户应用程序调用 API 游标函数时,SQL Server OLE DB 提供程序、ODBC 驱动程序或 DB-Library 动
态链接库(DLL)就把请求传送到服务器,以便对 API 服务器游标进行操作。
41.你是Litware,Inc 的数据库开发者。你正在修改该公司的sales 数据库结构。该数据库将客户信息储存在
Customers 的表中。该表包含一个字段Country,其储存了客户所在的国家。你又创建一个新表Country。创建
Customer 和Country 表的语法如下所示:
CREATE TABLE dbo.Country
(
CountryID int IDENTITY(1,1) NOT NULL,
CountryName char(20) NOT NULL,
CONSTRAINT PK_Country PRIMARY KEY CLUSTERED (CountryID)
)
CREATE TABLE dbo.Customers
(
CustomerID int NOT NULL,
CustomerName char(30) NOT NULL,
Country char(20) NULL,
CONSTRAINT PK_Customers PRIMARY KEY CLUSTERED (CustomerID)
)
你要尽可能快地将Customer表里头Country的信息转移到新Country表,该选用下面的哪条语句?
A. INSERT INTO Country (CountryName)
SELECT DISTINCT Country
FROM Customers
B. SELECT (*) AS ColID, c1.Country
INTO Country
FROM (SELECT DISTINCT Country FROM Customers)AS c1,
(SELECT DISTINCT Country FROM Customers) AS c2,
WHERE c1.Country >=c2.Country
GROUP BY c1.Country ORDER BY 1
C. DECLARE @Country char (20)
DECLARE cursor_country CURSOR
FOR SELECT Country FROM Customers
OPEN cursor_country
FETCH NEXT FROM cursor_country INTO @Country
WHILE (@@FETCH_STATUS <> -1)
BEGIN
If NOT EXISTS (SELECT CountryID
FROM Country
WHERE CountryName = @Country)
INSERT INTO Country (CountryName) VALUES (@Country)
22
FETCH NEXT FROM cursor_country INTO @Country
END
CLOSE cursor_country
DEALLOCATE cursor_country
D. DECLARE @SQL varchar (225)
SELECT @SQL = ‘bcp “SELECT ColID = COUNT(*), c1. Country’ +
‘FROM (SELECT DISTINCT Country FROM Sales..Customers) AS
c1, ' +
(SELECT DISTINCT Country FROM Sales..Customers) AS c2 '
+
WHERE c1.Country >= c2.Country’ +
‘GROUP BY c1.Country ORDER BY 1’ +
‘query out c:\country.txt -c’
EXEC master..xp_cmdshell @SQL, no_output
EXEC master..xp_cmdshell ‘bcp Sales..Country in c:\country. Txt-c’, no_output
答案:C
使用游标可以解决在customer 表中找到country 为空的行时跳过该行。
42.你是Contoso,Ltd 的数据库开发者。公司有一数据库HumanResources 存储着所有员工及办公室位置信息。
该库也存储着潜在员工及办公室的位置信息。包含这些信息的表如下所示:
当前员工都分配有一个位置,当前位置都安排有一或多个员工。潜在员工则还没分配位置,潜在位置也都还未
安排员工。你要创建一个报告显示所有当前及潜在的员工和办公室位置。你需列出已分配每一当前及潜在位置
以及分配在这个位置上的员工,潜在员工也应一起列出来。你该选哪个语句?(外联接的使用)
A. SELECT l.LocationName, e.FirstName, e.LastName
FROM Employee AS e LEFT OUTER JOIN Location AS 1
ON e.LocationID= l.LocationID
ORDER BY l.LocationName, e.LastName, e.FirstName
B. SELECT l.LocationName, e.FirstName, e.LastName
FROM Location AS 1 LEFT OUTER JOIN EMPLOYEE AS 1
ON e.LocationID= l.LocationID
ORDER BY l.LocationName, e.LastName, e.FirstName
C. SELECT l.LocationName, e.FirstName, e.LastName
FROM Employee AS e FULL OUTER JOIN Location AS 1
ON e.LocationID= l.LocationID
ORDER BY l.LocationName, e.LastName, e.FirstName
D. SELECT l.LocationName, e.FirstName, e.LastName
FROM Employee AS e CROSS JOIN Location AS 1
ORDER BY l.LocationName, e.LastName, e.FirstName
E. SELECT l.LocationName, e.FirstName, e.LastName
FROM Employee AS e, Location AS 1
ORDER BY l.LocationName, e.LastName, e.FirstName
23
答案: C.
43.你是一个网上定票数据库开发者。每次活动的可用票有500 或更多。大部分的申请用户在购买票之前可查
阅到的不多于50 张。然而,须让用户看到整个可用票的清单。一旦用户定了票,票据清单须被更新以反映那些
被定走了的票。用户才可以从清单里头选票、购票。你要让用户查阅并购买可用票。你该怎么做?(静态游标
和动态游标的区别)
A.使用可移动静态光标去检索票据清单
使用光标定位升级购票
B.使用可移动动态游标去检索票据清单
使用光标定位更新购票系统
C.使用存储过程检索票据清单
再用存储过程购票
D.使用用户定义函数检索票据清单
再用存储过程购票
答案:B
静态游标的完整结果集在游标打开时建立在 tempdb 中。静态游标总是按照游标打开时的原样显示结果集。
游标并不反映在数据库中所做的任何影响结果集成员的更改,也不反映会使组成结果集的行的列值发生变化的
更改。
动态游标与静态游标相对。当滚动游标时,动态游标反映结果集中所做的所有更改。结果集中的行数据值、顺
序和成员在每次提取时都会改变。所有用户做的全部 UPDATE、INSERT 和 DELETE 语句均通过游标可见。
44.你是一数据库顾问。你被一家本地狗饲养场雇用来开发数据库。该数据库用来存储他养的狗的信息。你用
下列语句创建一个表Dogs:
CREATE TABLE[dbo].[Dogs]
([DogID] [int] NOT NULL,
[BreedID] [int] NOT NULL,
[DateofBirth] [datetime] NOT NULL,
[WeightAtBirth] [decimal] (5, 2) NOT NULL,
[NumberOfSiblings] [int] NULL,
[MotherID] [int] NOT NULL,
[FatherID] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Dogs] WITH NOCHECK ADD
CONSTRAINT [PK_Dogs]PRIMARY KEY CLUSTERED
([DogID]) ON [PRIMARY]
GO
你须保证每条狗的MotherID和FatherID列都有有效值。你想在保证最小化磁盘I/O
的条件下执行这个规则。你该怎么做?
A.在表Dogs 上创建一个AFTER INSERT 触发器回滚MotherID 和FatherID 无效的事务。
B.在MotherID 和FatherID 列上创建一个CHECK 约束
C.创建两个外键约束:一个在MotherID 上,另一个在FatherID 上,且两个的主键都是DogID。
D.创建一个规则,把它绑到MotherID 和FatherID 上。
24
答案:C
45.你是一个公司的数据库开发者。公司将其员工信息储存于表Employee。创建Employee 表的语句如下:
CREATE TABLE Employee
(EmployeeID int NOT NULL;
EmpType char (1) NOT NULL,
EmployeeName char (50) NOT NULL,
Address char (50) NULL,
Phone char (20) NULL,
CONSTRAINT PK_Employee PRMARY KEY (Employee ID))
该表里的EmpType列用来识别员工为主管、管理阶层或顾问。你要让管理阶层的员工只能添加、修改、删除非
主管职员的信息。
你该怎么做?
A.创建一个视图,包含WITH ENCRYPTION 选项
B.创建一个视图,包含WITH CHECK OPTION 选项
C.创建一个视图,包含SCHEMABINDING选项
D.创建一个视图,其中再建一个索引
E.创建一个用户自定义函数返回一个包含非主管职员的表。
答案:B
46.你是某电力公司的数据库开发人员,当客户在声明的预定日期内没有支付帐单金额,此
金额就要每天增加1%直到支付了为止,存储过程如下所示
1 create procedure procUpdataBalances
2 as
3 begin
4
5 declare @Err int
6 set @Err=-1
7
8 update statements
9 set balance =balance *1.01
10 where duedate<gatedate()
11
12 set @Err = @@ERROR
13
14 If @Err = 0
15 Return @@ROWCOUNT
16 Else
17 Return @Err
18
19 END
它就会报告有多少个帐单超期。然而,你发现金额正在被这个存储过程更新,你该如何纠正这个问题?
A.把该存储过程的第12-17 行改为下面的语句:
Return @@ROWCOUNT
B.把该存储过程的第5-6 行改为下面的语句:
25
DECLARE @count int
把该存储过程的第12-17 行改为下面的语句:
SET @Count = @@ROWCOUNT
If @@ERROR = 0
Return @Count
Else
Return –1
C.把该存储过程的第5 行改为下面的语句:
DECLARE @Err int, @Count int
把该存储过程的第12-17行改为下面的语句:
SELECT @Err = @@ERROR, @Count = @@ROWCOUNT
IF @Err = 0
Return @Count
Else
Return @Err
D. 把该存储过程的第5 行改为下面的语句:
Return @@Error
E.把该存储过程的第5 行改为下面的语句:
DECLARE @Err int, @Count int
把该存储过程的第9 行改为下面的语句:
SET Balance = Balance * 1.01, @Count = Count (*)
Replace line 15 with the following:
Return @Count
答案:C
47.你是一家在线电子公司的数据库开发者。该公司的产品目录保存在products 表中。在正常的生意期间,
products 表频繁的被访问。
针对products 表的修改被写入pendingproductupdate 表。这些表格显示如下:
在营业时间后将使用pendingproductupdate 表来更新products 表。这个数据库服务器运行的是sql server 2000
并设置为8.0 兼容性模型。你要创建一个脚本来更新products 表。你将选择下面哪个脚本?(表别名的使用)
A. UPDATE Products
SET p1.[Description] = p2.[Description], p1.UnitPrice = p2.UnitPrice
FROM Products p1, PendingProductUpdate p2
WHERE p1.ProductID= p2.ProductID
GO
TRUNCATE TABLE PendingProductUpdate
GO
B. UPDATE Products p1
SET [Description] = p2.[Description], UnitPrice = p2.UnitPrice
FROM Products, PendingProductUpdate p2
WHERE p1.ProductID= p2.ProductID
GO
26
TRUNCATE TABLE PendingProductUpdate
GO
C. UPDATE Products p1
SET p1.[Description] = p2.[Description], p1.UnitPrice = p2.UnitPrice
FROM (SELECT [Description], UnitPrice
FROM PendingProductUpdate p2
WHERE p1.ProductID= p2.ProductID)
GO
TRUNCATE TABLE PendingProductUpdate
GO
D. UPDATE p1
SET p1.[Description] = p2.[Description], p1.UnitPrice = p2.UnitPrice
FROM Products p1, PendingProductUpdate p2
WHERE p1.ProductID= p2.ProductID
GO
TRUNCATE TABLE PendingProductUpdate
答案 :D
48.你是出口产品到全世界的运动商品公司的数据库开发者。公司存储它的销售信息于sales 数据库。客户名字
存储在这个数据库的customers 的表格里。用于创建这个表格的脚本显示如下:
CREATE TABLE Customers
(CustomerID int NOT NULL,
CustomerName varchar(30) NOT NULL,
ContactName varchar(30) NULL,
Phone varchar(20) NULL,
Country varchar(30) NOT NULL,
CONSTRAINT PK_Customers PRIMARY KEY (CustomerID))
通常每个国家只有一或二个客户。然而,一些国家有多达20 个客户。销售部门对能超过10 个客户的国家做广
告。你要为销售部门创建这些国家的清单。你将使用哪个脚本?
A SELECT Country FROM Customers
GROUP BY Country HAVING COUNT (Country)>10
B. SELECT TOP 10 Country FROM Customers
C. SELECT TOP 10 Country FROM Customers
FROM (SELECT DISTINCT Country FROM Customers) AS X
GROUP BY Country HAVING COUNT(*)> 10
D. SET ROWCOUNT 10
SELECT Country, COUNT (*) as “NumCountries”
FROM Customers
GROUP BY Country ORDER BY NumCountries, Desc
答案:A
SET ROWCOUNT是SQL Server 7.0版本中用于限制返回到客户端记录数的语句,在2000版本中多使用top n
49.你是某销售组织的数据库开发人员,你的数据库有一个名为Sales表,此表包括了来自
销售人员的销售订单概要信息。销售经理要求你创建一个销售额排在前20位的销售人员
报表,你该使用哪个查询来完成这个任务
27
A. SELECT TOP 20 PERCENT LastName, FirstName, SUM (OrderAmount) AS ytd
FROM sales
GROUP BY LastName, FirstName
ORDER BY 3 DESC
B. SELECT LastName, FirstName, COUNT(*) AS sales
FROM sales
GROUP BY LastName, FirstName
HAVING COUNT (*) > 20
ORDER BY 3 DESC
C. SELECT TOP 20 LastName, FirstName, MAX(OrderAmount) AS ytd
FROM sales
GROUP BY LastName, FirstName
ORDER BY 3 DESC
D. SELECT TOP 20 LastName, FirstName, SUM (OrderAmount) AS ytd
FROM sales
GROUP BY LastName, FirstName
ORDER BY 3 DESC
E. SELECT TOP 20 WITH TIES LastName, FirstName, SUM (OrderAmount) AS ytd
FROM sales
GROUP BY LastName, FirstName
ORDER BY 3 DESC
答案:E
50.你是一个旅行代理的数据库开发者。在Airlines数据库中有一个表为Flight Times,包含所有定期航线的飞行
信息。旅行代理用一个企业内部互联网应用程序来管理旅行预定。这个应用程序从Flight Times表中为毎个定期
航线检查信息.你的公司主要有一个特殊的定期航线,在这个Airlines数据库里这个特殊的定期航线有一个唯一的
标示符101。这个应用程序除了有为定期航线说明价格外,必须有要求飞行航次。此程序应该有为该定期航线返
回价格,而不需要指定值。只有不是这个特定航线才需要输入指定值。你应该怎么做?
A.创建两个存储过程,规定其中一个可以接受参数而另外一个没有。
B.创建一个用户自定义函数使得接受一个默认值参数为101。
C.创建一个存储过程使得接受一个默认值参数为101。
D.创建一个视图,在表FlightTimes表中填入101。
E.创建一个默认值为101在FlightTtTimes表中。
答案:C
带默认值参数的存储过程在执行时无需输入值,而带默认值参数的函数在执行时,比较要指定‘default’
51.你是一个翼尖玩具的数据库开发者。你有创建一个定单项目数据库,包含有两个表显示在下图
用户进入定单到项目应用程序。当一个新定单被加入,数据被保存到Order和LineItem表中在定单项目数据库里。
你必须确定整个定单被成功的保存。你应该用以下哪个语句?
(事务的原子性)
28
A. BEGIN TRANSACTION Order
INSERT INTO Order VALUES (@ID, @CustomerID, @OrderDate)
INSERT INTO LineItem VALUES (@ItemID, @ID, @ProductID, @Price)
SAVE TRANSACTION Order
B. INSERT INTO Order VALUES (@ID, @CustomerID, @OrderDate)
INSERT INTO LineItem VALUES (@ItemID, @ID, @ProductID, @Price)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
C. BEGIN TRANSACTION
INSERT INTO Order VALUES (@ID, @CustomerID, @OrderDate)
IF (@@Error = 0)
BEGIN
INSERT INTO LineItem
VALUES (@ItemID, @ID, @ProductID, @Price)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
END
ELSE
ROLLBACK TRANSACTION
END
D. BEGIN TRANSACTION
INSERT INTO Order VALUES (@ID, @CustomerID, @OrderDate)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
BEGIN TRANSACTION
INSERT INTO LineItem VALUES (@ItemID, @ID, @ProductID, @Price)
IF (@@Error = 0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
答案:C
52.你是一个真空吸尘器销售公司的数据库开发者。公司已有一个名为Sales的数据库,包含有VacuumSales表
和Employee表。销售信息存储在VacuumSales表中,雇员信息存储在employee表中,在Employee表中有一位列
名为IsActive.这个列表明该雇员当前是否被雇用。Employee表也有一个列为EmployeeID是毎个雇员的唯一标示
符。所有输入到VacuumSales表的销售记录,必须包含当前被雇用的雇员的employee ID。你应该如何来实现这
个要求?
A.用分布式事务处理Employee表在分布式处理中如果EmployeeID没有执行则将回滚整个事务。
B.在VacuumSales表的EmployeeID列中添加一个CHECK约束。
C.在VacuumSales表的EmployeeID列中添加一个外键约束参照Employee表中的EmployeeID列。
29
D.在VacuumSales表中添加一个FOR INSERT触发器。在触发器中,在inserted表的基础上连接Employee表和
EmployeeID表,测试IsActive列。
答案:D
题意要求插入到订单表的销售记录中的EmployeeID,在Employee表中相应的IsActive列必须为当前被雇佣,使
用触发器进行完整性检查。
53.你是某在线经纪公司数据库的开发人员,客户拥有的股票价格由SQL Server 2000数据库来进行维护。为了
允许对股票价格历史的跟踪,所有股票价格的更新必须有日志记载。为了帮助纠正关于价格更新的问题,任何
发生在更新期间的错误也必须载入日志。当错误被载入日志,识别哪只股票产生错误的信息必须返回给客户应
用系统。你必须确保正确的条件记入日志并产生正确的信息。你该使用哪段程序?
A. CREATE PROCEDURE UpdateStockPrice @StockID int, @Price decimal
AS BEGIN
DECLARE @Msg varchar(50)
UPDATE Stocks SET CurrentPrice = @Price
WHERE StockID = @ StockID
AND CurrentPrice <> @ Price
IF @@ERROR <> 0
RAISERROR (‘Error %d occurred updating Stock %d.’, 10, 1, @@ERROR, @StockID) WITH LOG
IF @@ROWCOUNT > 0
BEGIN
SELECT @Msg = ‘Stock’ + STR (@StockID) + ‘updated to’ + STR (@Price) + ‘.’--STR函数将数值转换成为
字符串类型
EXEC master. . xp_LOGEVENT 50001, @Msg --将用户定义消息记入 Microsoft® SQL Server™ 日志文件
和 Microsoft Windows NT® 事件查看器
END
END
B. CREATE PROCEDURE UpdateStockPrice @StockID int, @Price decimal
AS BEGIN
UPDATE Stocks SET CurrentPrice = @Price
WHERE StockID = @ StockID
AND CurrentPrice <> @ Price
IF @@ERROR <> 0
PRINT ‘ERROR’ + STR(@@ERROR) + ‘occurred updating Stock’ +STR (@StockID)+ .’
IF @@ROWCOUNT > 0
PRINT ‘Stock’ + STR (@StockID) + ‘updated to’ + STR (@Price) + ‘.’
END
C. CREATE PROCEDURE UpdateStockPrice @StockID int, @Price decimal
AS BEGIN
DECLARE @Err int, @RCount int, @Msg varchar(50)
UPDATE Stocks SET CurrentPrice = @Price
WHERE StockID = @ StockID
AND CurrentPrice <> @ Price
SELECT @Err = @@ERROR, @RCount = @@ROWCOUNT
IF @Err <> 0
BEGIN
SELECT @Msg = ‘Error’ + STR(@Err) + ‘occurred updating Stock’ + STR (@StockID) + ‘.’
30
EXEC master..xp_logevent 50001, @Msg
END
IF @RCOUNT > 0
BEGIN
SELECT @Msg = ‘Stock’ + STR (@StockID) + ‘updated to’ + STR (@Price) + ‘.’
EXEC master. . xp_LOGEVENT 50001, @Msg
END
END
D. CREATE PROCEDURE UpdateStockPrice @StockID int, @Price decimal AS BEGIN
DECLARE @Err int, @RCount int, @Msg varchar (50)
UPDATE Stocks SET CurrentPrice = @Price
WHERE StockID = @StockID
AND CurrentPrice <> @Price
SELECT @Err = @@ERROR, @RCount = @@ROWCOUNT
If @Err <> 0
RAISEERROR (‘Error %d occurred updating Stock %d.’, 10, 1, @Err, @StockID) WITH LOG
If @RCount > 0
BEGIN
SELECT @Msg = ‘Stock’ + STR (@StockID) + ‘update to’ + STR (@Price) + ‘.’
EXEC master. . xp_logevent 50001, @Msg
END
END
答案:D
本题要完成的任务有股票价格的更新信息要记入日志;在更新过程中发生错误要将错误记入日志;错误记入日
志后,产生错误的信息必须返回给客户应用系统。
A错@@ROWCOUNT记录了if 语句之后的行数
B错要用raiserror来返回错误信息并记入到日志中,用print语句无法实现记入日志
C错没有显示错误信息,只是进行了错误的记入日志
54.你是一个贷款业务公司的数据库开发者。你设计了数据库事务来支持一个新数据的应用程序。新数据项目
应用程序的用户将从数据库中检索贷款信息。用户将改变信息和保存更新信息到数据库。你应怎么设计这事务?
(点击选择和位置按钮然后合适的安排选择除了合适的事务步骤。)
31
答案:
原则:在事务中保持较短的执行单元;不要让未定的用户在事务中执行插入操作,一个事务也不能等待着用户
的输入。
55.你是一个货车租借公司的数据库开发者。公司创建了一个web 网站使用户能预订货车。你设计SQL server
2000数据库来支持此web 网站。新的卡车预定租借信息被插入到Reservations表中。已预订了货车的用户能在网
站更新他们的预订。当一个预订被更新,所有的预订信息必须复制到History表中。有时,用户将保存已有的预
订,而该预订实际没被更新过。这时,现有的预订不必要复制到History表。你需求开发一种创建合适的项目方
法 在History表中。你应该做什么?
A.在Reservations表中创建一个触发器来实现创建的History表。
B.在Reservations表中创建一个级联更新参照完整性约束到创建的History表项目中。
C.在Reservations表中创建一个视图。包含 WITH SCHEMABINDING 选项在视图定义中。
D.在Reservations表中创建一个视图。包含 WITH CHECK OPTION选项在视图定义中。
答案:A
B级联更新无法实现将一行数据拷贝到另一张表中
?56.你是一个Inc.Proseware的数据库开发者.公司有一个数据包含关于公司地理位置信息,这些信息中还包含
了对应的邮政号码。此信息是包含在这个数据库里的公司表。当前数据库为五个不同的邮政号码包含了公司的
数据。在一个特定的邮政号码范围内,公司的数量是10到5000。更多的公司和邮政号码将被加到数据库中。你
创建一个查询从数据库中检索信息。你需要通过在数据库上进行最小限度改动来提供新的数据。你的查询性能
不被要返回的公司数量所影响。你需要创建一个查询来完成一致地和最小限度的未来的维护。你应该怎么做?
A.创建一个存储过程,要求一个邮政号码作为一个参数。包含 WITH RECOMPILE选项当过程被创建时。
B.为毎个邮政号码创建一个存储过程。
C.为毎个邮政号码创建一个视图。
D.将公司的表分为多个表以便于每个表包含一个邮政号码,在表中建立一个分割视图以至于在单一表上数据仍
然可以查看
答案:A
创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高
32
速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次
均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。
57.你是woodgrove 银行的一个数据库开发者.你正在把数据载入SQLServer2000 数据库.数据被临时载入
Staging 表中.当数据载入过程完成时,数据从这个表中被删除.不需要还原这个被删除的表.你要尽可能快的确信
数据从Sraging 表中被删除,你应该怎么做?
A 使用delete 语句从表中还原数据
B 使用 truncate table 语句从表中还原数据
C 使用 drop table 语句从表中还原数据
D 使用一个可更新的游标访问和还原表中的毎一行数据
答案:B
58.你是一个汽车代理权的数据库开发者.你正设计一个数据库来支持一个web,使这个网页用来购买汽车,某
人从网页上购买一辆汽车,将能够选择模型和顔色.产商做了4 个不同的汽车模型.模型能够以5 种顔色中的任一
种被定购.每一种模型有一个默认的顔色.模型被存放在一个Models 表中,顔色被存放在一个Colors 表中.这些表
如下所示:
你需要创建一个清单存放所有可能的模型和顔色的组合. 你将使用哪一个脚本?
A. SELECT m.ModelName, c.ColorName
FROM Colors AS c FULL OUTER JOIN Models AS m
ON c.ColorID = m.ColorID
ORDER BY m.ModelName, c.ColorName
B. SELECT m.ModelName, c.ColorName
FROM Colors AS c CROSS JOIN Models AS m
ORDER BY m.ModelName, c.ColorName
C. SELECT m.ModelName, c.ColorName
FROM Colors AS m INNER JOIN Colors AS c
ON m.ColorID = c.ColorID
ORDER BY m.ModelName, c.ColorName
D. SELECT m.ModelName, c.ColorName
FROM Colors AS c LEFT OUTER JOIN Models AS m
ON c.ColorID = m.ColorID
UNION
SELECT m.ModelName, c.ColorName
FROM Colors AS c RIGHT OUTER JOIN Models AS m
ON c.ColorID = m.ColorID
ORDER BY m.ModelName, c.ColorName
E. SELECT m.ModelName
FROM Models AS m
UNION
SELECT c.ColorName
33
FROM Colors AS c
ORDER BY m.ModelName
答案:B
使用交叉联接能够返回两个表中每个列进行组合后的结果
59.你是Adventure Works 的数据库开发者.大型数据有已经从一个人力资源应用输出到一个文本文件.被用来输
出人类资源数据的Format File 如下所示:
Format File
1 SQLINT 0 4 “,” 1 EmployeeID “”
2 SQLCHAR 0 50 “,” 2 Firstname SQL_Latin1_General_CP1_AS
3 SQLCHAR 0 50 “,” 3 Lastname SQL_Latin1_General_CP1_AS
4 SQLCHAR 0 10 “,” 4 SSN SQL_Latin1_General_CP1_AS
5 SQLDATETIME 0 8 “” 5 Hiredate “”
你需要把数据输入到一个Employee 表中.那表如下所示:
你要尽可能快的运行这个输入,你该怎么做?
A 使用SQL-DMO and Microsoft Visual Basic Scripting Edition 来创建一个表对象.
使用表对象的导入数据方式来载入这个表
B 使用SQL-DMO and Microsoft Visual Basic Scripting Edition 来创建一个数据库对象.使用数据库对象的拷贝
方式来载入这个表
C 使用DTS 和Microsoft Visual Basic Scripting edition 来创建一个包.为文本文件创建一个连接对象.增加一个大
容量插入任务到包.使用包的执行方式来载入数据.
D 使用DTS 和Microsoft Visual Basic Scripting edition 来创建一个包.为文本文件创建一个连接对象.增加一个
ExecuteSQLTask2 到包.使用执行ExecuteSQLTask2 方式来载入数据.
答案:C
大容量插入任务可提供最快的方法,用于将大量的数据复制到 Microsoft® SQL Server™ 表或视图,为了确
保高速数据移动,在将数据从源文件移动到表或视图时,不能对它进行转换。对于数据的转换,使用DTS(数
据转换服务)来完成。
60.你是一个保险公司的数据库开发者.那公司有一个Policies 数据库.你有为这个数据库设计存储程序,使用游
标来处理大型结果组合.使用存储过程的分析者报告在数据出现前有一个长的延迟.在延迟之后,结果是正确的.
仅只有分析者,使用Policies 数据库.你想要改善存储程序的性能,你将使用哪一个脚本?
A. EXEC sp_configure ‘cursor threshold’, 0
B. EXEC sp_dboption ‘Policies’ SET CURSOR_CLOSE_ON_COMMIT ON
C. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
D. ALTER DATABASE Policies SET CURSOR_DEFAULT LOCAL
答案:A
34
sp_configure 系统存储过程配置选项,可以管理和优化 Microsoft® SQL Server™ 资源。
‘cursor threshold’选项指定游标集的行数,游标键集在该游标集中异步产生。如果将 cursor threshold 设为 –1,
则所有游标键集将同步产生,这对于小游标集很有用。如果将 cursor threshold 设为 0,则所有游标键集异步
产生。
B 错, 数据库使用针对的是数据分析者, 较少的用到事务, sp_dboption ‘Policies’ SET
CURSOR_CLOSE_ON_COMMIT ON 将关闭提交或回滚事务时所打开的任何游标
C 设置事务的隔离基本为可串行读
D 设置了CURSOR_DEFAULT LOCAL,且创建游标时没有将其定义为 GLOBAL,则对于在其中创建游标的
批处理、存储过程或触发器,游标的作用域都是局部
?61.你是一个书店的数据库开发者.你正设计一个存储程序来处理XML 文档.你使用下面的脚本来创建存储程
序:
CREATE PROCEDURE spParseXML (@xmlDocument varchar(1000)) AS
DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument --读取作为输入提供的可扩展标记语
言 (XML) 文本,然后使用 MSXML 语法分析器 (Msxml2.dll) 对其进行分析
SELECT *
FROM OPENXML (@docHandle, ‘/ROOT/Category/Product’,2)
WITH (ProductID int,
CategoryID int,
CategoryName varchar (50),
[Description] varchar (50))
EXEC sp_xml_removedocument @docHandle
你执行这个存储程序和使用一个XML 文档作为那输入文档。 XML 文档如下所示:
XML Document
<ROOT>
<Category CategoryID= “1” CategoryName= “General Books”>
<Product ProductID=“10248” Description=“Cooking for
you”>
</Product>
</Category>
<Category CategoryID= “2” CategoryName= “Videos”>
<Product ProductID= “80248” Description= “7 Minute Abs”>
</Product>
</Category>
<Category CategoryID= “3” CategoryName= “Computer Books”>
<Product ProductID= “12345” Description= “Inside SQL
Server 2000”>
</Product>
<Product ProductID= “22345” Description= “Analysis
Services with SQL Server 2000”>
</Product>
</Category>
</ROOT>
你接收到输出如下所示:
Output
35
ProductID CategoryID CategoryName Description
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
(4 row(s) affected)
你需要取代存储过程主体部份,你将使用哪一个脚本?
A. SELECT *
FROM OPENXML (@docHandle, ‘/ROOT/category/Product’, 1)
WITH (ProductID int,
CategoryID int,
CategoryName varchar(50),
[Description] varchar (50))
B. SELECT *
FROM OPENXML (@docHandle, ‘/ROOT/category/Product’, 8)
WITH (ProductID int,
CategoryID int,
CategoryName varchar(50),
[Description] varchar (50))
C. SELECT *
FROM OPENXML (@docHandle, ‘/ROOT/category/Product’, 1)
WITH (ProductID int,
CategoryID int,
CategoryName varchar(50), ‘@CategoryName’,
[Description] varchar (50))
D. SELECT *
FROM OPENXML (@docHandle, ‘/ROOT/category/Product’, 1)
WITH (ProductID int,
CategoryID int ‘../@CategoryID’,
CategoryName varchar(50), ‘../@CategoryName’,
[Description] varchar (50))
答案:D
OPENXML 通过提供 XML 文档内部表示法的行集视图,允许访问 XML 数据,就好象它是关系行集一样。
行集中的记录可以存储在数据库表中(类似于表和视图所提供的行集)。
语法
OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]])
[WITH (SchemaDeclaration | TableName)]
参数
idoc 是 XML 文档的内部表式法的文档句柄。通过调用 sp_xml_preparedocument 创建 XML 文档的内部表式法。
rowpattern 是 XPath 模式,用来标识要作为行处理的节点(这些节点在 XML 文档中,该文档的句柄由 idoc 参
数传递)。
flags 表示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。flag 为可选输入参数,值为0,1,2,
8。
62.你是Adventure Works 的一个数据库开发者。你正为记录毎年工资信息的人力资源部门设计一个脚本。有
三种类型的职员。一些职员挣每小时的工资,一些是月薪,还有一些按他们所做的销售来付给。这些数据被记
36
录在Wages表中。用以下语句创建表:
CREATE TABLE Wages
(emp_id tinyint identity,
hourly_wage decimal NULL,
salary decimal NULL,
commission decimal NULL,
num_sales tinyint NULL)
一个职员能有仅仅一种类型的工资信息。你必须正确记录每一个职员毎一年的工资信息。你应该使用哪一个脚
本?
A. SELECT CAST (hourly_wage * 40 * 52 +
salary +
commission * num_sales AS MONEY) as YearlyWages
FROM Wages
B. SELECT CAST (COALESCE (hourly_wage * 40 * 52,
Salary,
commission * num_sales) AS MONEY) as YearlyWages
FROM Wages
C. SELECT CAST (CASE
WHEN((hourly_wage,) IS NOTNULL) THEN hourly_wage * 40 * 52
WHEN(NULLIF(salary,NULL)IS NULL)THEN salary
ELSE commission * num_sales
END
AS MONEY)
As YearlyWages
FROM Wages
D. SELECT CAST(CASE WHEN (hourly_wage IS NULL)THEN salary
WHEN (salary IS NULL)THEN commission*num_sales
ELSE commission * num_sales
END
AS MONEY)
As YearlyWages
FROM Wages
答案:B
COALESCE函数返回其参数中第一个非空表达式;NULLIF函数如果两个指定的表达式相等,则返回空值,两
个表达式不相等,返回第一个表达式的值;
63.你是一个保险公司的数据库开发者。公司的地方办公室用XML文档传输他们的销售信息到公司的主要办公
室。那XML文档被存储在SalesXML表中,这个表在一个SQL Server 2000数据库中。在XML文档中的数据包含保
险代理人的名字,还有保险单拥有者的名字,保险单受益人的信息,保险政策的详细信息。你创建一些表来存
放XML文档中的信息。你要把XML文档中的信息存入这些表中,你该做什么?
A 使用SELECT语句包含FOR XML AUTO 子句把数据从XML文档拷贝到适当的表中。
B 使用SELECT语句包含FOR XML EXPLICIT子句把数据从XML文档拷贝到适当的表中。
C. 使用OPENXML功能来访问数据并把它插入适当表中。
D 在SalesXML表中创建一个视图来显示XML文档中的内容。使用SELECT INTO语句来把视图中的数据插入适
当的表中。
37
答案:C
OPENXML函数可以插入由XML文档中提取出的数据。OPENXML 是与表或视图相似的行集提供程序。
OPENXML 通过提供 XML 文档内部表示法的行集视图,允许访问 XML 数据,就好象它是关系行集一样。
行集中的记录可以存储在数据库表中(类似于表和视图所提供的行集)。
无论行集提供程序(如表、视图或 OPENROWSET)可以在何处作为源出现,都可以在 SELECT 和 SELECT
INTO 语句中使用 OPENXML。
64.你是一个保险公司的数据库开发者。你创建一个Insured表,包含在保险单上的人的信息。你用下面语句来创
建这个表:
CREATE TABLE dbo.Insured (
InsuredID int IDENTITY (1, 1) NOT NULL,
PolicyID int NOT NULL,
InsuredName char(30) NOT NULL,
InsuredBirthDate datetime NOT NULL,
CONSTRAINT PK_Insured PRIMARY KEY
CLUSTERED
(InsuredID),
CONSTRAINT FK_Insured_Policy FOREIGN
KEY
(PolicyID) REFERENCES dbo.Policy(
PolicyID ) )
一张保险单上的人以他们的名字和出生日期来单独识别。一张保险单上不只一个人。一个人不能超过一次的被
放在同一张保险单上。你必需确保数据库正确运行保险单和保险单上的人的关系,你将怎么做?
A.增加PolicyID, InsuredName, and InsuredBirthDate 列为主键。
B.添加UNIQUE 约束来运行PolicyID,InsuredName, and InsuredBirthDate 列的组合的独特性。
C.添加一个CHECK 约束来运行PolicyID,InsuredName, andInsuredBirthDate 列的组合的独特性。
D.在PolicyID, InsuredName, and InsuredBirthDate 列上创建一个聚集索引。
答案:B
强制惟一性,可以通过主键和惟一约束,但主键不允许有空值
65.你正在为Tailspin Toys 设计一个数据库。你查看数据库设计,得到的结果显示如下:
你想要提高查询响应时间和减少多余的数据。你应该怎么做?
38
A.创建一个命名为CustomerContact 的表,添加CustomerID,ContactName,Phone 列到该表中。
B.创建一个新的复合的主键约束在OrderDetails 表中,该主键约束包含OrderID,ProductID,CustomerID 列。
C.删除在表OrderDetails 中的主键约束,使用一个唯一约束键来为OrderDetails 表创建一个代理键。
D.删除OrderDetails 表中的CustomerID 列
E.删除OrderDetails 表中的Quantity 列,增加Quantity 列到Orders 表中.
答案: D.
66.你是一个汽车代理的数据库开发者。公司将他的汽车库存数据存放在一个 SQL Server 2000数据库中。在
数据库中很多关键性的查询同时连接到分别命名为Make, Model, Manufacturer.的三个表。这些表经常被更新。
你想要提高关键性的查询的响应时间。你该怎么做?
A.在三个联接表中创建一个索引视图。
B.创建一个存储过程,该存储过程从表中返回数据。
C.创建一个用户自定义标量函数,该函数返回表中的数据。
D.创建一个用户自定义表值函数,该函数返回表中的数据
答案: A.
在查询中引用一些视图,如包含聚集大量数据或联接许多行,可通过在视图上创建唯一聚集索引来提高性能。
查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命令视图。这样一来,可从索引视图检
索数据而无需重新编码,由此带来的高效率也使现有查询获益,视图上创建聚集索引可存储创建索引时生成的
结果集。
67.你是一家保险公司的数据库开发人员,公司有一个总办事处和18 个地区办事处,每个
办事处都有一个SQL Server 2000 数据库。地方办事处和总办事处之间用一个高速网络
连接。总办事处的数据库被用来统一来自各地区办事处数据库的信息。总办事处数据库
中的数据表水平的划分。地区办事处的所处位置被用来作为总办事处数据库主键的一部
分。你正在设计物理复制模型,你该做什么?
A. 配置总办事处计算机为订阅服务器
B. 配置总办事处计算机是一个用远程分发服务的发布服务器
C. 配置总办事处计算机为一个中心发布服务器,地区办事处计算机为订阅服务器
D. 配置地区办事处计算机为分发服务器,总办事处计算机为中心订阅服务器
答案: D.
数据是从地区办事处复制到总办事处的
68.你是一个服装零售商的数据库开发者。公司有一个命名为Sales的数据库。该数据库包含一个命名为Inventory
的表。Inventory表包含销售中项目的清单和项目中可用的数量。当销售信息被插入到数据库,这个表被更新。
更新存货表的存储过程显示如下:
CREATE PROCEDURE UpdateInventory @IntID
int
AS
BEGIN
DECLARE @Count int
BEGIN TRAN
SELECT @Count = Available
FROM Inventory WITH (HOLDLOCK)
WHERE InventoryID = @IntID
39
IF (@Count > 0)
UPDATE Inventory SET Available = @Count – 1
WHERE InventoryID = @IntID
COMMIT TRAN
END
当这个存储过程执行,数据库服务器有时返回如下错误消息:
Transaction (Process ID 53) was deadlocked on {lock} resources with another
process and has been chosen as the deadlock victim. Rerun the transaction.
你需要阻止该错误的发生当维护数据完整性的时候。你该怎么做?
A.删除表提示.
B.更改表提示为UPDLOCK.
C.更改表提示为REPEATABLEREAD(可重复读取)
D.设置事务隔离级别为SERIALIZABLE(可串行读.)
E.设置事务隔离级别为REPEATABLE READ(可重复读取)。
答案: B.
可以使用 SELECT、INSERT、UPDATE 和 DELETE 语句指定表级锁定提示的范围,以引导 Microsoft® SQL
Server™ 2000 使用所需的锁类型。当需要对对象所获得锁类型进行更精细控制时,可以使用表级锁定提示。这
些锁定提示取代了会话的当前事务隔离级别。
HOLDLOCK将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁, 等同于
SERIALIZABLE。这个表提示十分局限,
UPLOCK 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点
是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
A错,删除表提示后采用默认的事务隔离级别不可提交读
C错,采用可重复读的隔离级别会产生幻读
69.你是Wide World Importers(公司名)数据库的开发者。公司跟踪它在一个SQL Server 2000数据库中的定
购信息。数据库包含两个表,这两个表中包含有订购的详细资料。这两个表分别命名为Order和LineItem.被用
来创建这两个表的脚本显示如下:
CREATE TABLE dbo.Order
(
OrderID int NOT NULL,
CustomerID int NOT NULL,
OrderDate datetime NOT NULL,
CONSTRAINT DF_Order_OrderDate DEFAULT (getdate())FOR OrderDate,
CONSTRAINT PK_Order PRIMARY KEY CLUSTERED (OrderID)
)
CREATE TABLE dbo.LineITEM
(
ItemID int NOT NULL,
OrderID INT NOT NULL,
40
ProductID int NOT NULL,
Price money NOT NULL,
CONSTRAINT PK_LineITEM PRIMARY KEY CLUSTERED (ItemID),
CONSTRAINT FK_LineITEM_Order FOREIGN KEY (OrderID)
REFERENCES dbo.Order (OrderID)
)
公司审核人员发现2000年6月1号的所有定购产品的输入价格都比实际的多了10美元,你
要尽可能快的纠正数据库中的数据,你该使用哪个脚本?
A. UPDATE l
SET Price = Price – 10
FROM LineItem AS l INNER JOIN [Order] AS o
ON l.OrderID = o.OrderID
WHERE o.OrderDate >= ‘6/1/2000’
AND o.OrderDate < ‘6/2/2000’
B. UPDATE l
SET Price = Price – 10
FROM LineItem AS l INNER JOIN [Order] AS o
ON l.OrderID = o.OrderID
WHERE o.OrderDate = ‘6/1/2000’
C. DECLARE @ItemID int
DECLARE items_cursor CURSOR FOR
SELECT l.ItemID
FROM LineItem AS l INNER JOIN [Order] AS o
ON l.OrderID = o.OrderID
WHERE o.OrderDate >= ‘6/1/2000’
AND o.OrderDate < ‘6/1/2000’
FOR UPDATE
OPEN items_cursor
FETCH NEXT FROM items_cursor INTO @ItemID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE LineItem SET Price = Price – 10
WHERE CURRENT OF items_cursor
FETCH NEXT FROM items_cursor INTO @ItemID
END
CLOSE items_cursor
DEALLOCATE items_cursor
D. DECLARE @OrderID int
DECLARE order_cursor CURSOR FOR
SELECT ordered FROM [Order]
WHERE OrderDate = ‘6/1/2000’
OPEN order_cursor
FETCH NEXT FROM order_cursor INTO @OrderID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE LineItem SET Price = Price – 10
WHERE OrderID= @OrderID
41
FETCH NEXT FROM order_cursor INTO @OrderID
END
CLOSE order_cursor
DEALLOCATE order_cursor
答案: A.
使用简单的更新语句比游标操作执行时花费时间少
datetime数据类型是有日期数据和时间数据组合而成的,不能简单的进行等值的比较
70.你是一个书店数据库的开发者。每个月,你接收到从你的厂商以XML文档形式发送过来的新的提供信息。这
个 XML文档显示如下:
你正在设计一个存储
过程来读取XML 文档
和将数据插入到一个
命名为Products 的表
中。这个表被显示如
下:
问下面哪个脚本语句
应该被用来创建这个
存储过程?(OPENXML
语法)
A. CREATE PROCEDURE spAddCatalogItems (
@xmlDocument varchar (8000))
AS
BEGIN
DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
INSERT INTO Products
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
INSERT INTO Products
SELECT * FROM
OPENXML (@docHandle, ‘/ROOT/Category/Product’, 1)
WITH Products
EXEC sp_xml_removedocument @docHandle
END
B. CREATE PROCEDURE spAddCatalogItems (
@xmlDocument varchar (8000))
AS
BEGIN
DECLARE @docHandle int
XML Document
<ROOT>
CategoryID= “2” CategoryName= “Videos”>
<Product ProductID= “80248” Description= “7 Minute Abs”>
</Product>
</Category>
<Category CategoryID= “3” CategoryName= “Computer Books”>
<Product ProductID= “12345” Description= “Inside SQL Server 2000”>
</Product>
</Category>
<Category CategoryID= “3” CategoryName= “Computer Books”>
<Product ProductID= “22345” Description= “Analysis Services with SQL
Server 2000”>
</Product>
</Category>
<ROOT>
42
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
INSERT INTO Products
SELECT * FROM OPENXML (@docHandle, ‘/ROOT/Category/Product’, 1)
WITH (ProductID int ‘./@ProductID’,
CategoryID int ‘../@CategoryID’,
[Description] varchar (100) ‘./@Description’)
EXEC sp_xml_removedocument @docHandle
END
C. CREATE PROCEDURE spAddCatalogItems (
@xmlDocument varchar (8000))
AS
BEGIN
INSERT INTO Products
SELECT * FROM OPENXML (
@xmlDocument, ‘/ROOT/Category/Product’, 1)
WITH (ProductID int, Description varchar (50))
END
D. CREATE PROCEDURE spAddCatalogItems (
@xmlDocument varchar (8000))
AS
BEGIN
INSERT INTO Products
SELECT* FROM
OPENXML (@xmlDocument, ‘/ROOT/Category/Product’,1)
WITH Products
END
答案: B.
71.你是Trey Research一个数据库的开发者。你正在设计一个SQL Server 2000
数据库,该数据库将被很多公司用来发布复制。你在一个包含有机密信息的数据库中创建了一些存储过程。你
想要阻止公司来查看这些机密信息。你该怎么做?
A.从系统表syscomments中删除存储过程中的文本。
B.对存储过程的文本加密
C.在系统表syscomments否认public角色中的SELECT权限
D.在系统表sysobjects否认public角色中的SELECT权限
答案: B.
WITH ENCRPTION选项可以保证存储过程的创建文本不被其他用户查看。
72.你是Southridge Video.(公司名)一个数据库开发者。公司将销售信息存放在SQL
Server 2000 数据库中。你被要求从数据库中删除超过5年的订购记录。为了删除记录,你在SQL查询分析器中
执行下面的语句:
DELETE FROM Orders WHERE OrderDate < (DATEADD (year, -5, getdate()))
当接收到下面消息后你关闭SQL查询分析器
(29979 row(s) affected)
你检查表发现旧的记录仍然存在表中。当前的连接属性显示如下:
43
你该怎么做?
A.删除表中与Order表相关联的记录。
B.使得Order表中的触发起不可用。
C.执行一条关闭隐性事务(SET IMPLICIT_TRANSACTIONS OFF)语句
D.执行SET CURSOR_CLOSE_ON_COMMIT ON语句
E.更改DELETE语句的逻辑
答案: C
SET IMPLICIT_TRANSACTIONS { ON | OFF }
当设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐性事务模式。当设置为 OFF 时,则使连接返回
到自动提交事务模式。对于隐性事务模式,用户必须在该事务结束时将其显式提交或回滚。否则当用户断开连
接时,事务及其所包含的所有数据更改将回滚。
73.你是一家电话销售公司的一个数据库开发者。你要设计一个名为customercontacts 的数据库。这个数据库
将被频繁的更新。这个数据库将有1G 的大小。你要让数据库达到最好的性能。你的C:\ 盘有5GB 的空间。你
将用以下哪一语句来创建数据库?
A. CREATE DATABASE CustomerContacts
ON
(NAME = Contacts_dat,
FILENAME = ‘c:\data\contacts.mdf’,
SIZE = 10,
MAXSIZE = 1GB
FILEGROWTH= 5)
B. CREATE DATABASE CustomerContacts
ON
44
(NAME = Contacts_dat,
FILENAME = ‘c:\data\contacts.mdf’,
SIZE = 10,
MAXSIZE = 1GB
FILEGROWTH= 10%)
C. CREATE DATABASE CustomerContacts
ON
(NAME = Contacts_dat,
FILENAME = ‘c:\data\contacts.mdf’,
SIZE = 100,
MAXSIZE = UNLIMITED)
D. CREATE DATABASE CustomerContacts
ON
(NAME = Contacts_dat,
FILENAME = ‘c:\data\contacts.mdf’,
SIZE = 1GB)
答案: D.
74.你为一家名为woodgrove 的银行开发数据库。该公司在一个SQL Server 2000数据库中存储它的销售数据。
你要在这个数据库中创建一个索引视图。为了达到该目的,你要执行如下脚本:
Set NUMERIC_ROUNDABORT OFF--指定当表达式中的四舍五入导致精度损失时不生成的错误报告
GO
CREATE VIEW Sales
AS
SELECT SUM(UnitPrice*Quantity*(1.00-Discount))AS Revenue,
OrderDate, ProductID, COUNT_BIG(*) AS COUNT—返回bigint型的统计
FROM dbo.OrderDetails AS OD JOIN dbo.Orders AS O
ON OD.OrderID = O.OrderID
GROUP BY O.OrderDate, OD.ProductID
GO
CREATE UNIQUE CLUSTERED INDEX IX_Sales ON Sales (OrderDate,
ProductID)
索引创建失败,并接收到一个错误信息。你要排除错误来创建索引。
问你要怎么做?
A.为视图增加一个order by 子句。
B.为视图增加一个having 子句。
C.选择NUMERIC_ROUNDABORT 选项。
D.改变索引为唯一的、非聚集索引
E.为视图增加WITH SCHEMABINDING 选项
答案: E.
在视图上创建索引,这个视图的定义必须包含WITH SCHEMABINDING 选项(P381)
75.你是某公司SQL Server 2000数据库的开发者,另一位开发者Andrea需要修改数据库中
现有的几个视图。然而,你想要阻止她浏览或修改数据表中的数据。目前,Andrea只拥
有Public数据库角色,你该做什么?
45
A. 添加Andrea到db_owner数据库角色中
B. 添加Andrea 到db_ddladmin数据库角色中
C. 授予Andrea创建视图( CREATE VIEW)权限
D. 授予Andrea 修改视图(ALTER VIEW)权限
E. 授予Andrea 对表的引用(REFERENCES)权限
答案: B.
db_ddladmin可以发出 ALL DDL(CREATE/DROP/ALTER),但不能发出 GRANT、REVOKE 或 DENY 语
句,也不可以执行DML(SELECT/UPDATE/INSERT/DELETE)
db_owner在数据库中拥有全部权限。
76.你是一家迅速发展的公司的一名数据库开发者。这家公司每个月都要扩充新的销售地区。当增加一个新的
销售地区,这个新的地区就会生成有一个或更多的销售代理商。销售数据将被插入到一个名为RegionSales的表
里,它属于Corporate数据库。RegionSales 表如下所示:
每一个代理商都只能查看和修改RegionSales表里各自地区的信息。要尽可能简单的扩展新的地区和增加代理
商。你要怎么做?
A.使用grant、revoke和deny语句来给代理商分配权限。
B.使用企业管理器为RegionSales表分配权限。
C.为每个销售地区创建一张关于RegionSales表的视图,授于代理商访问各自销售地区的视图的权限。
D.创建一个名为Security的新表来包含代理商和销售地区的联接信息。创建一个存储过程,通过和Security表
比较来审核用户的合法性,决定允许或不允许修改RegionSales表里的数据。
E.创建一个名为Security的新表来控制销代理商和销售地区的联接信息。创建一个自定义函数用于允许或不允
许修改RegionSales表里的数据。授于所有的代理商执行该自定义函数的权限
答案: D
代理商模型的属性有(id,name,regionid),需要生成一个新的表S(regionid,id)是将销售表和代理商表作联接,
创建的存储过程通过对S表的访问,来确定每个代理商所在的地区
CREATE PROCEDURE RegionalSalesProcedure (@id as char(50))
AS
DECLARE @gid
select @gid=regionid from S where id=@id
SELECT RegionalSalesID, SaleDate, CustomerID, ProductID, RegionID
FROM RegionSales
WHERE RegionID=@gid
END
77.你是一家玩具公司的数据库开发者。Marie是另一名开发者,她创建了一张名为ToySales的表。Marie和你
都不是系统固定的服务器角色,但你们两个的数据库角色都是db_owner。ToySales表存储公司所有部门的销售
信息。该表设置如下:
46
你登入到数据库中并创建了一张名为vwDollSales只显示ToySales表中的洋娃娃的销售信息的视图。在洋娃娃部
门的雇员被授于数据的完全访问权限。你也创建了一张名为vwActionFigureSales的视图,该视图只显示action
figures的销售数据。在action figures数据部门的雇员被授于完全访问彼此间的数据。这两个部门当前没有访问数
据的权力。在数据部门的雇员与dolls数据库角色相关联。运算数据部门的雇员与ActionFigure数据库角色相关
联。你要保证两个部门都只能查询各自的数据。你必须执行哪三个步骤?(每一个正确答案是解决方法的一部
分,选3个)
A. 把表和视图的所有权传递给数据库所有者。
B. 授予你的登录用户SELECT ToySales表的权限。
C. 授予Doll数据库角色SELECT vwDollSales 视图的权限。
D. 授予ActionFigure数据库角色SELECT vwActionFigureSales 视图的权限。
E. 拒绝Doll数据库角色SELECT ToySales表的权限。
F. 拒绝ActuibFigure数据库角色SELECT ToySales表的权限。
答案: A, C, D.
A的目的是为了避免打破所有权链,必须将表的所有权从Marie传输到视图的创建者也就是‘你’手上;
78.你是一个SQL Server 2000 数据库的数据库开发者。该数据库安装在 Microsoft Windows 2000 Server
computer 上。 数据库使用默认配置,数据库中所有的表至少要有一个索引。SQL Server是服务器上唯一一个
运行的应用程序。一天中数据库的活动高峰期是在销售代表输入和更新销售处理事务时。批量报告在营业时间
后被执行。销售代表报告说更新和插入处理太缓慢。你要怎么做?
A. 在SQL Server上运行系统监视器:在一天中访问计数器的方法. 使用从系统监视器的输出来识别哪些表需要
索引.
B. 使用sp_configure 系统存储过程来增加由SQL Server使用的锁的数量。
C.在一天内运行SQL Profiler。选择SQL:BatchCompleted 和 RPC:Completed 事件和 EventClass和TextData数
据列.使用一个SQL事件查看器输出文件作为索引向导的输入文件。
D. 增加 min server memory 选项的有效值。
E.重建索引,把填充因子设为100.
答案: C.
利用索引优化向导可以对输入的工作负荷文件进行索引优化,找到可以创建的索引和可以删除的索引报告出
来,工作负荷文件可以是SQL事件探查器对于数据库运行的跟踪而生成的文件。
79.你是一家运输公司的数据库开发人员,你有一个SQL Server 2000数据库来存储订单的
信息,此数据库包含名为Order和OrderDetails的表,这个数据库部署的计算机有四个
容量为9GB的磁盘驱动器可用作数据存储,这台计算机有两个磁盘控制器,每个磁盘控
制器控制两个磁盘驱动器。Order和OrderDetail表经常被联接查询。你需要调整数据库
的性能,你该怎么做?(选择两个可行的答案)
A. 为每个磁盘驱动器创建一个新的文件组
B. 在与非聚簇索引独立的文件组中为Order表创建聚簇索引
C. 在一个文件组中为OrderDetail表存储数据和聚簇索引并在另一个文件组中创建非聚簇索引
D. 在一个文件组中创建Order表和它的索引,并在另一个文件组中创建OrderDetail表和它的索引
47
E. 创建两个文件组,每个文件组包括和同一个控制器连接的两个磁盘驱动器。
答案:D、E
查询是在两张表的联接上进行的,所以要让这两张表位于不同的文件组,以提高访问效率。
80.你是一个brokerage公司的数据库开发者。这个数据库包括一张名为Trades的表。如下是用于创建该表的脚
本:
CREATE TABLE Trades
(TradeID int IDENTITY(1,1)PRIMARY KEY NONCLUSTERED NOT NULL,
TradeDate datetime NULL,
SettlementDate datetime NULL,
Units decimal(18, 4) NULL,
Symbol char(5) NULL,
ClientID int NULL,
BrokerID int NULL)
GO
CREATE CLUSTERED INDEX c_symbol ON Trades (Symbol)
在一天内trades表被频繁的插入和更新。每天晚上都要汇报有关该表的运行。
你在查询分析器里执行如下语句:
DBCC SHOWCONTIG (Trades)
执行后在出现如下结果:
DBCC SHOWCONTIG scanning ‘Trades’ table. . . . .
Table: ‘Trades’(1621580815); index ID:1, database ID:12
Table level scan performed.
-Pages Scanned-----------------------------------------:104
-Extents Scanned---------------------------------------:16
-Extent Switches----------------------------------------:24
-Avg. Pages per Extent-------------------------------:6.5
-Scan Density[Best Count:Actual Count]-----------:52.00%[13:25]
-Logical Scan Fragmentation-------------------------:7.69%
-Extent Scan Fragmentation---------------------------:43.75%
-Avg. Bytes Free per page-----------------------------:460.1
-Avg. Page Density (full)------------------------------:94.32%
DBCC execution completed. If DBCC printed error messages, contact
your system
你要确保在trades表里可任意的进行插入和查询操作。你要怎么做?
A. 在表中执行 DBCC DBREINDEX 语句.
B. 在表中执行UPDATE STATISTICS 语句.
C. 在聚集索引上执行 the DROP STATISTICS 语句.
D. 在主键索引上执行 DBCC INDEXDEFRAG statement 语句.
E. 在主键索引上执行the DROP INDEX and CREATE INDEX 语句.
答案:A
逻辑扫描的碎片有7.69%,还可以接受,但扩展扫描碎片达到了43.75%,说明表已经有大量的碎片了,要通过重
建索引的办法来消除这些碎片
DBCC SHOWCONTIG报告索引碎片的情况,DBCC DBREINDEX重建表上所有索引包括主键。
48
81.你是数据库Inventory的开发人员,你已经有一个你需要创建的报表的列表,这些报表
将同时运行,你写了创建每个报表的查询代码,基于这些查询,你设计并创建了数据库
表的索引。你需要确保你已经创建了有用的索引,你该怎么做?
A. 创建一个SQL 部署(Profiler)跟踪,并使用对象事件(Objects event)类
B. 对包含了报表中使用的查询的工作量文件运行索引调整向导(Index Tuning Wizard)
C. 运行系统监控器,并使用SQLServer:Access方法计数
D. 对SQL查询分析器(Query Analyzer)中的表执行查询操作,并使用选项SHOWPLAN_TEXT
答案:B
82.你是你公司的SQL SERVER 2000 DB 的数据库开发者。你使用下面的脚本来创建一个名为EMPLOYEE 的视图:
create view emplyee as
select
p.ssn,p.lastname,p.firstname,p.address,p.city,p.state,p.birthdate,e.employeeid,e.department,e.sa
lay
from person as p join employees as e on(p.ssn=e.ssn)
这个视图将被一个应用程序使用,这个应用程序是用来向PERSON 和EMPLOYEES 这两个表里插入记录的。用来创
建这些表格的脚本如下所示:
create table person
(ssn char(11) not null primary key,
lastname varchar(50) not null,
firstname varchar(50) not null,
address varchar(100) not null,
city varchar(50) not null,
state char(2) not null,
birthdate datetime not null)
go
create table employees
(employeeid int not null primary key,
ssn char (11) unique not null,
department varchar(10) not null,
salary money not null,
constraint fkempper foreign key(ssn) references person (ssn))
你想要使这个应用程序能够防止视图来发布INSERT 语句,你得怎么做?
A 在视图上创建一个AFTER 触发器
B 在视图上创建一个INSTEAD OF 触发器
C 在PERSON 和EMPLOYEES 表上创建一个INSTEAD OF 触发器
D 把视图修改成带有WITH CHECK 选项
E 把视图修改成带有WITH SCHEMABINDING 选项
答案:B
83.你是大世界进口商的一个数据库开发者。你正在为公司的SQL SERVER2000 DB 创建一个名为ORDERS 的表。
每一个订单包含ORDERID,ORDERDATE,CUSTOMERID,SHIPPERID,SHIPDATE.当订单要输入时,带有订单的客户
服务代表得输入ORDERDATE,CUSTOMERID 和SHIPPERID。ORDERID 由数据库自动生成,并且一定是唯一的。订单
49
只能从已存在的客户那里得到。SHIPPERS 只能从一个存在的SHIPPERS 集中选择。在客户服务代表完成订单后,
这个订单被送到装运部门进行最后的处理。当订单被装运后,装运部门就输入SHIP DATE。
下面哪一个语句可以用来创建ORDERS 表?
A. CREATE TABLE Orders
(OrderID uniqueidentifier PRIMARY KEY NOT NULL,
OrderDate datetime NULL,
CustomerID char(5) NOT NULL FOREIGN KEY
REFERENCES Customer (Customer ID),
ShipperID int NOT NULL FOREIGN KEY
REFERENCES Shippers(ShipperID),
ShipDate datetime Null)
B. CREATE TABLE Orders
(OrderID int identity (1, 1) PRIMARY KEY NOT NULL,
OrderDate datetime NOT NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES Customer (Customer ID),
ShipperID int NOT NULL FOREIGN KEY REFERENCES Shippers(ShipperID),
ShipDate datetime Null)
C. CREATE TABLE Orders
(OrderID int identity (1, 1) PRIMARY KEY NOT NULL,
OrderDate datetime NULL,
CustomerID char(5) NOT NULL FOREIGN KEY
REFERENCES Customer (Customer ID),
ShipperID int NULL,
ShipDate datetime Null)
D. CREATE TABLE Orders
(OrderID uniqueidentifier PRIMARY KEY NOT NULL,
OrderDate datetime NOT NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES Customer (Customer ID),
ShipperID int NOT NULL FOREIGN KEY REFERENCES Shippers(ShipperID),
ShipDate datetime Null)
答案:B
84.你是LUCERNE 出版社的数据库开发者。公司把数据存放在SQL SERVER 2000 里。这个数据库包含一个名为
ORDERS 的表。当前,这个表上有一个聚集索引,这个索引是由客户名和当前日期组成的。当前,ORDERS 表有750,
000 行,并且行数每周增加5%。公司计划下周开展促销活动,那样ORDERS 表的行插入量将会增长50%。你要在
促销期间优化ORDERS 表的插入,你得怎么做?
A 每天晚上创建一个作业来重新组建聚集索引,并且使用FILLFACTOR 默认。
B 给ORDERS 表增加另外的索引。
C 垂直分割ORDERS 表。
D 重建聚集索引,使用FILLFACTOR OF 50
E 在ORDERS 表上执行更新统计(UPDATE STATISTICS)
答案:D
数据的增加会导致索引表被分割,会使性能受到影响,最好是预先估计数据页中数据的增长情况,来重建索引,
留出预留的空间。FILLFACTOR 默认为80%。
50
85.你正在设计你公司的Sales数据库,这个数据库将被三个客户应用系统使用。查询访问
数据库的用户是Microsoft Windows 2000组的当前成员。根据用户对数据库的访问需求,
他们被安置在Windows 2000组中。客户应用系统将通过每个应用程序现有的角色来连接
Sales数据库,每个应用程序角色被分配一个密码。所有用户只能通过客户应用系统来
访问Sales数据库,数据库没有授予权限,你该做什么?
A. 给每个Windows 2000组分配适当的权限
B. 给每个应用程序角色分配适当的权限
C. 给Windows 2000 组分配适当的应用系统角色
D. 为用户提供应用程序角色的口令
答案:B
对于创建一个应用程序角色,我们要做以下四个步骤1.创建应用程序角色;2.给应用程序角色分配密码;3.指
定一个应用程序作为应用程序角色访问数据库的程序;4.分配适当的权限给应用程序角色
86.你是你公司INSURANCE 数据库的开发者。你在SQL 查询分析器里执行以下的脚本来检索代理表和保险单信
息:
SELECT A.LastName, A.FirstName, A.CompanyName, P.PolicyNumber
FROM Policy AS P JOIN AgentPolicy AS AP
ON (P.PolicyNumber = AP.PolicyNumber)
JOIN Agents AS A ON (A.AgentID= AP.AgentID)
生成的查询执行计划如下所示:
当你把光标指向扫描表的图标时,你得到的信息如下所示:
51
你想要提高这个查询的性能。你得怎么做?
A 改变FROM 子句中表的次序,把AGENT 表放在最前面
B 查询中使用HASH JOIN 来连接AGENTS 表
C 用AGENTS 表中的AGENTID 列创建一个聚集
索引。
D 用AGENTS 表中的AGENTID 列创建一个非集
索引。
答案:C
在AGENTS 表上有一个表扫描,这个效率很低,要对
Agents 和AgentPolicy 建立联接查询,在AGENTS 表
中的AGENTID 列创建一个聚集索引可以用聚集索引
扫描来代替表扫描,提高效率
87.你是一个数据库顾问。你的一个客户报告说SQL
Server 2000 的查询反应时间缓慢,特别是需要表连接的时候。哪些步骤你要执行来分析这个性能问题?
答案: Step 1 Use SQL Profiler to create a trace based on the SQL Profiler Tuning Template
Step 2 Specify that the trace data be saved to a file, and specify a maximum file size.
Step 3 Specify a stop time for the trace.
Step 4 Run the trace.
Step 5 Use the trace file as an input to the Index Tuning Wizard.
Table Scan
Scan rows from a table
Physical operation: Table Scan
Logical operation: Table Scan
Row count: 6,969
Estlmated row size: 105
I/O cost: 0.00139
CPU cost: 0.00773
Number of executes: 1
Cost: 0.157175(12%)
Subtree cost: 0.157
Estimated row count: 6,969
Argument:
OBJECT:([Insurance].[dbo].[Agents])
52
Step 6 Replay the trace, and examine the output.
Step 7 (none)
利用SQL 事件探查器和索引优化向导来确定表和视图中比较适合的索引,索引优化向导必须依据工作负荷文件
或者表的结构等信息进行优化,步骤如下:
1.启动事件探查器
2.创建一个事件跟踪
3.选择一个跟踪模板
4.将跟踪所得的数据保存为文件,并指定文件的最大容量
5.指定跟踪的停止时间
6.将跟踪文件作为索引优化向导的工作负荷输入到索引优化向导
7.当索引优化向导运行完毕后,根据给出的优化建议进行索引的更新
88.你是一个为WINGTIP TOYS 的数据库开发者。这个公司把销售信息存放在SQL SERVER 2000 DB 里。这个数
据库包含一个名叫ORDERS 表。你想要把旧的数据从ORDERS 表移到一个档案表。在执行这个处理前,你想要知
道优化查询是怎样处理插入语句的。
你在SQL 查询分析器里执行以下的语句:
SET SHOWPLAN_TEXT ON
GO
CREATE TABLE Archived_Orders_1995_1999
(
OrderID int,
CustomerID char (5),
EmployeeID int,
OrderDate datetime,
ShippedDate datetime
)
INSERT INTO Archived_Orders_1995_1999
SELECT OrderID, CustomerID, EmployeeID, OrderDate, ShippedDate
FROM SalesOrders
WHERE ShippedDate < DATEADD (year, -1, getdate())
你得到如下的错误信息:
Invalid object name ‘Archived_Orders_1995_1999’.
你要解决这个问题,要怎么做?
A 把CHIVED_ORDERS_1995_1999 表命名为所有者名字
B 请求CREATE TABLE 许可
C 在你执行SET SHOWPLAN_TEXT ON 语句前,创建ARCHIVE_ORDERS_1995_1999 表
D 把表名改成ARCHIVEDORDERS
答案:C
当SET SHOWPLAN_TEXT ON 所有的语句就不能被执行, 只能如何显示执行的详细信息, 也就是说表
Archived_Orders_1995_1999 并没有成功被创建,所以无法执行往表中插入记录的操作。
89.你是Woodgrove 银行的数据库开发者.公司有一个包含人力资源信息的数据库.你正在设计事务以支持数据
插入到数据库.你设计的两个事务的脚本如下:
Transaction1 Transaction2
53
BEGIN TRANSACTION
UPDATE Customer
SET CustomerName=@Name
WHERE
CustomerID=@CustID
UPDATE CustomerPhone
SET PhoneNumber=@Phone
WHERE
CustomerID=@CustID
AND PhoneType=@PType
COMMIT TRANSACTION
BEGIN TRANSACTION
UPDATE CustomerPhone SET
PhoneNumber=@Phone
WHERE CustomerID=@CustID
AND PhoneType = @Ptype
UPDATE CustomerAddress SET Street =
@Street
WHERE CustomerID=@CustID
AND AddressType=@AType
UPDATE Customer SET CustomerName =
@Name
WHERE CustomerID = @CustID
COMMIT TRANSACTION
当你检测这些脚本时,你发现数据库服务器偶尔探测到一个死锁请况.你该怎么办?
A. 在第二个事务中,把update customer 语句放在update customerphone 语句之前
B. 增加一个 SET DEADLOCK_PRIORITY LOW 语句到两个事务上。
C.为每个事务增加一个检查系统错误号1205的脚本,如果发现这个错误就回滚事务,重新开始事务的操作
D. 增加一个 SET LOCK_TIMEOUT 0语句到两个事务上。
答案: A.
当某个事务DEADLOCK_PRIORITY LOW 则发生死锁时,作为首选牺牲事务
LOCK_TIMEOUT 设置允许应用程序等待阻塞资源的最长时间,返回锁定错误前经过的毫秒数,0 表示根本不
等待
90.你是棒球队统计信息数据库的开发人员,这些统计信息存储在名为Statistics 的数据
库中。每个队的队员都录入到Statistics 数据库中名为Rosters 的表里。用来创建这
个Rosters 表的脚本如下所示:
CREATE TABLE Rosters
(
RosterID int NOT NULL,
TeamID int NOT NULL,
FirstName char(20) NOT NULL,
LastName char(20) NOT NULL,
CONSTRAINT PK_Rosters PRIMARY KEY (RosterID),
CONSTRAINT FK_TeamRoster FOREIGN KEY (TeamID)
REFERENCES Team (TeamID)
)
在表Rosters 中每个棒球队一次最多有24 个队员,你需要保证球队人数不超过该最大值.
你该怎么办?
A.在表Rosters 中创建触发器验证该数字.
B.创建一种规则来验证该数字。
C. 创建一个包含WITH CHECK OPTION字句的 UPDATE 视图。
D.在 Rosters 表上添加一个CHECK约束来验证该数字。
54
答案: A.
91.你是一家咨询公司的数据库开发者.你创建一个名为reporting 的数据库.来自于其他两个名为training 和
consulting 的数据库中顾客姓名和id 的信息,要导入reporting 数据库.
你在reporting 数据库中创建一个customers 表.创建脚本如下所示:
CREATE TABLE Customers
(
CustomerKey int NOT NULL,
SourceID int NOT NULL,
CustomerName varchar(100) NOT NULL,
CONSTRAINT PRIMARY KEY PK_Customers (CustomerKey)
)
数据必须从training 数据库中的students 表和consulting 数据库中的clients 表传到customers 表.students
表和clients 表如下所示:
你必须创建一个传输数据到customers 表的脚本.该脚本的第一部分如下所示:
SCRIPT:
CREATE TABLE #tmpCustomers
(
CustomerID int IDENTITY(1, 1) NOT NULL,
SourceID int NOT NULL,
CustomerName varchar(100) NOT NULL,
CONSTRAINT PRIMARY KEY PK_tmpCustomers (CustomerID)
)
INSERT INTO #tmpCustomers (SourceID, CustomerName)
SELECT StudentID, StudentName FROM Training.dbo.Students
IF @@ERROR <> 0 RETURN
INSERT INTO #tmpCustomers (SourceID, CustomerName)
SELECT ClientID, ClientName FROM Consulting.dbo.Clients
IF @@ERROR <> 0 RETURN
为完成脚本,选择需要的脚本并排列顺序.
SELECT AND PLACE
55
答案:
56
92.你是一个投资经纪公司的数据库开发者.公司有一个stocks 数据库,包含currentprice 和pastprice 表.投
资股票当前的价格被储存在currentprice 表.先前的股票价格被储存在pastprice 表.这些表如下所示:
表包含的数据如下所示:
currentprice 表中的所有行在营业日结束时被更新,即使股票价格自从上一次更新以来没有改变也要更新.如果
股票价格从上一次更新以来已经改变,那么必须在pastprice 表中插入一行.你必须为数据库设计一个方法自动
57
执行这个动作.你该怎么办?
A.在currentprice 表中创建一个after 触发器,用来比较在inserted 和deleted 表中stockprice 列的值.如果
值不一样,那么触发器将插入一行到pastprice 表中.
B.在currentprice表中创建一个after触发器, 用来比较在inserted和CurrentPrice表中stockprice列的值。如
果值不一样,那么触发器将插入一行到pastprice表中.
C.在CurrentPrice表上创建一个级联更新约束来更新PastPrice表中的行。
D.创建一个存储过程用来比较表CurrentPrice上StockPrice字段的新旧值 。如果值不一样,那么过程将插入一行
到pastprice表中.
答案: A.
创建更新触发器在表currentprice 上,更新触发器会产生inserted 表(放置更新后的数据)和deleted 表(放
置更新前数据),比较后,确定是否要对pastprice 进行插入。
93.你是Wingtip Toys 的数据库开发者.公司在sqlserver 2000 数据库中跟踪它的目录清单.你有几个查询和
存储过程,在数据库中一些索引支持已创建的查询,存储过程执行使用了这些索引.当编制的存货项目增加时,一
些存储过程的执行时间明显增加.其他访问同样信息的查询和存储过程并没有增加.你必须恢复运行慢的存储过
程的性能,达到原先执行的时间.你该怎么办?
A. 总是使用 WITH RECOMPILE 选项去执行运行慢的存储过程。
B. 为每张表中运行慢的存储过程执行UPDATE STATISTICS语句。
C. 为每一个运行慢的存储过程执行sp_recompile 系统储存过程.
D. 为每张表中运行慢的存储过程执行DBCC REINDEX语句。
答案: C.
一些存储过程的查询性能降低,需要重新创建执行计划并对基表的统计信息进行更新。
94.你是销售公司数据库开发者,你已经设计了一个季度销售视图。这个视图结合了几个表
并计算了总计信息,你给视图创建了一个unique索引,你想提供参数化查询来访问包含
在你索引视图中的数据。输出将会在其他SELECT列表中使用。你该如何完成这个目标?
A. 使用ALTER VIEW语句在视图定义中添加参数值
B. 创建一个存储过程来接受作为输入的参数并用结果集返回一个行集(rowset)
C. 创建一个标量用户定义函数来接受作为输入的参数
D. 创建一个内联用户定义函数来接受作为输入的参数
答案: C.
用户内嵌自定义函数应用在from 子句中,不是用在select 子句中。
?95.你正在为一个大型的食品连锁店做设计.部分数据库计划如下所示.
用来创建customers 表的脚本如下所示.
商店经理想跟踪顾客人口,以便给顾客提供广告和促销优惠卷.这些广告和促销将基于现存顾客过去的购买情况.
广告和促销将通过一个或更多的人口资料来锁定购买方式,这些人口资料有:性别,年龄,邮编号码和地区.大部
分的促销将基于性别和年龄.将用查询来检索顾客人口统计信息.你想查询反应时间尽可能快.你该怎么办?
A. 为Customers 表的PostalCode、 State和 DateOfBirth列添加索引。
B. 不规范化custmoers 表
C. 在Customers、 SalesLineItem、 State,和 Product表上创建一个视图。
D. 创建一个函数用来返回Customers表上所需要的数据。
答案: B.
58
96.你是一个Lucerne Publishing 的数据库开发者. 你要设计一个人力资源数据库,该库包含employee 和
salary 表.你和用户面谈并且发现下面这些信息:
employee 表将经常通过employeeid 列和salary 表连接
employee 表上的个人记录将通过社会安全号码(ssn)来选择
将创建一个雇员列表.列表先以last name 的字母顺序排序,在以first name 的字母顺序排序。你需要为表设
计索引,同时优化索引性能.
你应该采用哪3 个脚本?
A. CREATE CLUSTERED INDEX [IX_EmployeeName] ON [dbo].[Employee]
([LastName],[FirstName])
B. CREATE INDEX [IX_EmployeeFirstName] ON [dbo].[Employee] ([First Name])
CREATE INDEX [IX_EmployeeLastName] ON [dbo].[Employee] ([Last Name])
C. CREATE UNIQUE INDEX [IX_EmployeeEmployeeID] ON [dbo].[Employee] ([EmployeeID])
D. CREATE UNIQUE INDEX [IX_EmployeeSSN] ON [dbo].[Employee] ([SSN])
E. CREATE CLUSTERED INDEX [IX_EmployeeEmployeeID] ON
[dbo].[Employee]([EmployeeID])
F. CREATE CLUSTERED INDEX [IX_EmployeeSSN] ON [dbo].[Employee] ([SSN])
答案: A, C, D.
在lastname 和fristname 列上创建组合聚集索引,可以使表的物理顺序按照名字的字母顺序来存储。查询中需
要使用到employeeid 和SSN,分别创建唯一的非聚集索引。
97.你是一个大型电子功能公司的数据库开发者.公司划分成许多的部门,而且公司的每一个雇员都分配到某个
部门. 你创建一个employee 表,包含所有雇员的信息,也包含他们所属的部门。创建employee 的脚本如下所
示:
CREATE TABLE Employee
(
EmployeeID uniqueidentifier NOT NULL,
FirstName char (20) NOT NULL,
LastName char (25) NOT NULL,
DepartmentID int NOT NULL,
Salary money NOT NULL,
CONSTRAINT PK_Employee PRIMARY KEY (EmployeeID)
)
每个部门经理应该只能看到属于他部门的雇员的信息。你应该怎么办?
A. 使用授予、拒绝、废除语句为每个部门经理分派权限。
B. 为每个部门经理添加一个数据库注册到 db_datareader 固定数据库角色中。
C. 在employee表,建立表和视图,强制水平级别安全
D. 在 Employee表上使用SQL Server Enterprise Manager来分派权限。
答案: C.
为每个部门创建一个视图,只分配视图的查询权限给相应的部门经理。
98.你是公司人力资源数据库的开发人员,这个数据库包括一个名为Employee的表,此表包括机密的身份证号
码和薪水。这个表还包括其他一些非机密的信息,比如员工名字和住
址。你需要使所有Employee表中非机密信息能够以XML格式被外部应用系统获得。外部
应用系统必须指定精确的XML数据格式。你还需要在外部应用系统中隐藏机密信息。你
该怎么做?
59
A. 创建一个存储过程以XML格式返回Employee表中的非机密信息
B. 创建一个用户自定义函数以XML格式返回Employee表中的非机密信息的行集
C. 创建一个仅包含Employee表的非机密信息视图,给予外部应用系统提交对视图查询
的权限
D. 在表Employee中设置列级权限来阻止外部应用系统浏览机密列,给予外部应用系统
提交对表查询的权限
答案: C.
要求非保密信息已XML 格式被外部应用系统获得,在视图中使用XDR 架构,这个视图就可以使用XML 查询,外部应
用程序可以指定返回XML 的参数
99.你是一个Tailspin Toys 的数据库开发者。你有两个SQL Server 2000 计算机,名为CORP1 和CORP2。这两
台计算机使用SQL Server 2000 验证方式。CORP2 存储来自于CORP1 的数据。每个月末,数据从CORP1 移除并传
到CORP2.你正在设计季报告,包含来自于CORP1 和CORP2 的数据。你想要分布式查询尽快的查询。你应该采取
哪3 个步骤?
A. 创建一个储存过程,使用OPENROWSET 语句来检索数据
B. 创建一个储存过程,使用完全表名在CORP2 检索数据
C. 创建一个脚本,使用OPENQUERY 语句来检索数据
D. 在CORP1 执行sp_addlinkedserver 系统存储过程
E. 在CORP1执行sp_addlinkedsrvlogin系统存储过程
F. 在CORP2执行sp_serveroption系统存储过程并且把collation compatible设置为ON.
答案: B, D, E.
P462-464 先建立CORP2 与CORP1 的服务器链接,即用sp_addlinkserver 创建一个链接的服务器,建立与远程数
据源的链接;第二步建立链接服务器的安全性,使用
sp_addlinkedsrvlogin 在本地和远程SQL 之间的安全性,通过映射登录帐户和密码;再在已经链接的远程服务
器上进行检索数据
100.你是一个IT 咨询公司的数据库开发者。你正在设计一个数据库来存储在位顾问的信息。你在数据库中创
建了一个CandidateSkills 表。表如图所示:
你应该怎么样唯一识别每个顾问的技能?
A. 在CandidateID 列上创建主键
B. 在CandidateID 和DateLastUsed 列上创建主键
C. 在CandidateID 和 SkillID 列上创建主键
D. 在CandidateID 、SkillID 和DateLastUsed 列上创建主键
答案: C.
101.你是Proseware 公司的数据库开发者。你为公司的人力资源部开发一个数据库,该数据库储存雇员信息。
60
你创建了一个EmployeeContact 表包含下面的列:HomePhone,
BusinessPhone, FaxNumber, and EmailAddress 你必须保证每个记录包含一个值,或者HomePhone 列或者
BusinessPhone 列,你应该怎么做?
A.创建一个禁止空值的规则 .将该规则绑定到HomePhone 和BusinessPhone列
B. 创建一种用来阻止在HomePhone和BusinessPhone列中输入空值的规则.将该规则绑定到表上。
C. 在HomePhone 和 BusinessPhone列中添加check 约束用来阻止空值的输入。
D. 添加check 约束,验证HomePhone 和BusinessPhone 列至少有一列不为空
答案: D.
102.你为Contoso 公司设计一个库存和商品买卖数据库。你创建了逻辑数据库如图所示:
你必须保证维护数据库的参照完整性。哪3 个类型的约束应该应用于设计?
A. 在Products 表上创建外键约束,指向OrderDetails 表
B. 在Products 表上创建外键约束,指向Suppliers 表
C. 在Order 表上创建外键约束,指向OrderDetails 表
D. 在OrderDetails 表上创建外键约束,指向Order 表
E. 在OrderDetails 表上创建外键约束,指向Products 表
F. 在Suppliers 表上创建外键约束,指向Products 表
答案: B, D, E.
103.你是SQL Server2000 数据库的开发者。你为销售部门创建了一个存储过程,生成EndOfMonthSales 报告。
你利用下面的语句为EndOfMonthSales 报告分配权限
GRANT EXECUTE ON EndOfMonthSales TO SalesDept
Andrea 加入了销售部门并且成为SalesDept 角色成员。Andrea 也是Marketing 角色成员,该角色已经被拒绝访
问EndOfMonthSales 报告。Andrea 不能执行存储过程。其他销售部门的雇员没有碰到该问题。你该怎么办?
A.添加 Andrea 到db_datareader 数据库角色中.授予 REFERENCES权限到 public 角色中.
B.从Marketing 角色中删除Andrea。
C.在已经引用存储过程的表上授予 Andrea’s数据库用户账户选择的权限.
D.在已经引用存储过程的表上授予 Andrea’s数据库用户账户REFERENCES的权限.
答案: B.
一个用户如果是多个角色的成员,这些角色的权限是相互矛盾的,则执行受限性最高的权限,DENY 的权限限制高
61
于EXCUTE,所以Andrea 不能执行存储过程.
104.你是一个大型旅游公司的数据库开发者.你在resvervation 数据库中被授予CREATE VIEW 的权限.你的同
事Eric 被授予CREATE TABLE 的权限.你们俩都没有数据库拥有者或者系统权限,也没有被添加到任何固定服务
器角色中.Eric 已经创建了Traveler 表并且存有公司顾客的信息.表如下所示:
旅行代理处要连接数据库浏览存储在该表的信息.对应旅行代理处的登录被分配到Agent 数据库角色中.你想旅
行代理处能够浏览Traveler 表中姓名和地址两列信息,而不是六列信息.你应该采取哪3 个步骤?
A.授予agent 角色对Traveler 表有选择的权限
B.叫Eric授予agent角色在Traveler表上有选择的权限.
C.叫Eric 授予你Traveler 表中需要的列的REFERENCES 权限.
D.叫Eric 创建一个名为vwTravelers 的视图,并以所希望的格式显示数据
E.创建一个视图vwTravelers,并以所希望的格式显示数据
F.授予agent 角色对视图vwTravelers 有选择的权限
答案: C, E, F.
使得Agent 数据库角色能够通过视图查询到所需的信息,所以必须要保证所有权链.
105.你是一个食物批发商的数据库开发者.每星期,公司完成不同顾客的订单.通常,每个顾客每星期定购同样数
量的一定项目.偶尔,顾客定购的某个项目的数量明显少于顾客通常的数量.订单的信息储存在表invoice 中,该
表在sqlserver2000 数据库中.创建该表的脚本如图所示:
EXHIBIT
CREATE TABLE Invoice
(
InvoiceID int NOT NULL,
InvoiceNumber char(10) NOT NULL,
CustomerName char(30) NOT NULL,
InvoiceAmount money NOT NULL DEFAULT (0),
CONSTRAINT PK_Invoice PRIMARY KEY (InvoiceID)
)
你想验证这些和平常不一样的订单的样品,为此,你必须为每个顾客生成一列发货单,其中数量少于该顾客平均
的货物数量.你应该用哪个查询?( 相关子查询的应用)
A. SELECT i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount
FROM Invoice As i1, Invoice AS i2
GROUP BY i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount
HAVING i1.InvoiceAmount < AVG (i2.InvoiceAmount)
ORDER BY i1.CustomerName, i1.InvoiceNumber
B. SELECT i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount
FROM Invoice As i1
WHERE i1.InvoiceAmount<(SELECT AVG (i2.InvoiceAmount)
FROM Invoice AS i2
WHERE i2.CustomerName=i1.CustomerName)
ORDER BY i1.CustomerName, i1.InvoiceNumber
C. SELECT i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount
FROM Invoice As i1
WHERE i1.InvoiceAmount<(SELECT AVG (i2.InvoiceAmount)
FROM Invoice AS i2)
ORDER BY i1.CustomerName, i1.InvoiceNumber
62
D. SELECT i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount,
CASE WHEN i1.InvoiceAmount< AVG (i2.InvoiceAmount)
THEN i1.InvoiceAmount ELSE 0 END
FROM Invoice As i1 INNER JOIN Invoice AS i2
ON i1.CustomerName = i2.CustomerName
GROUP BY i1.InvoiceNumber, i1.CustomerName, i1.InvoiceAmount
ORDER BY i1.CustomerName, i1.InvoiceNumber
答案: B. 两个WHERE 一个ORDER
106.你是Contoso 公司的数据库开发者.公司在SQL Server2000 中储存它的销售数据.数据库包含一个表
customers,它有500,000 行.用来创建表customers 的脚本如图所示:
CREATE TABLE Customers
(
CustomerID int IDENTITY NOT NULL,
CompanyName varchar(40) NOT NULL,
ContactName varchar(30) NULL,
ContactTitle varchar(30) NULL,
Address varchar(60) NULL,
City varchar(15) NULL,
Region varchar(15) NULL,
PostalCode varchar(10) NULL,
Country varchar(15) NULL,
Phone varchar(24) NULL,
Fax varchar(24) NULL,
CONSTRAINT PK_Customers PRIMARY KEY CLUSTERED (CustomerID)
)
许多重要的查询在该表上执行,该查询选择基于城市和地区列的顾客信息.非常少的顾客住在同样的城市,但许
多处于同样的地区.你应该怎样来优化这些查询的性能?
A.在Customers表上创建一个视图.
B.为Customers表创建一个返回数据的函数.
C.在city 和region 列上创建一个复合的非集聚索引,并且city 作为第一列.
D.在City和Region 列上创建一个复合的非聚集索引并且把 Region作为第一列.
E. 把City 和Region列添加到聚集索引中并把 Region 作为第一列
答案: C.
提高查询性能,可以通过创建复合索引,将密度低的列设置成复合索引的第一列,可以用较短的时间找到所需
要的行。
107.你是一个SQL Server2000 数据库的开发者.数据库默认配置.在过去的一个月访问数据库的用户从100 增
加到1000.用户通知你他们频繁地收到错误的信息.下面是一个收到错误信息的例子:
Transaction (Process ID 56) was deadlocked on [lock] resources with another
process and has been chosen as the deadlock victim. Rerun the transaction.
你应该怎么办?
A.在数据库中为事件使用更高的事务隔离级别.
B.使用SQL Profiler 捕获死锁事件
C.使用系统监视器来监视锁的请求和死锁.
63
D. 执行 sp_configure系统存储过程来增加允许同时连接SQL server.的用户数量
答案:B
A 错,要想阻止死锁的发生,应该要降低事务的隔离级别而不是提高隔离级别;
C 错,使用系统监视器能够查看的到死锁的统计情况,但是无法检测死锁产生的原因;
D 错,增加同时连接到服务器的用户数,会更增加死锁的发生机会
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
use test/*一个项目涉及到的50个Sql语句问题及描述:--1.学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号--3.教师表 Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名--4.成绩表 SC(S#,C#,score) --S# 学生编号,C# 课程编号,score 分数select * from Studentselect * from Courseselect * from Teacherselect * from SC*/--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')insert into Student values('04' , N'李云' , '1990-08-06' , N'男')insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10))insert into Course values('01' , N'语文' , '02')insert into Course values('02' , N'数学' , '01')insert into Course values('03' , N'英语' , '03')create table Teacher(T# varchar(10),Tname nvarchar(10))insert into Teacher values('01' , N'张三')insert into Teacher values('02' , N'李四')insert into Teacher values('03' , N'王五')create table SC(S# varchar(10),C# varchar(10),score decimal(18,1))insert into SC values('01' , '01' , 80)insert into SC values('01' , '02' , 90)insert into SC values('01' , '03' , 99)insert into SC values('02' , '01' , 70)insert into SC values('02' , '02' , 60)insert into SC values('02' , '03' , 80)insert into SC values('03' , '01' , 80)insert into SC values('03' , '02' , 80)insert into SC values('03' , '03' , 80)insert into SC values('04' , '01' , 50)insert into SC values('04' , '02' , 30)insert into SC values('04' , '03' , 20)insert into SC values('05' , '01' , 76)insert into SC values('05' , '02' , 87)insert into SC values('06' , '01' , 31)insert into SC values('06' , '03' ,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值