1.你是公司的SQL Server 2000联机事务处理数据库的数据库开发人员。许多表有一百万或更多的行,所有的表都建立了一个簇索引,经常存取的表另外还至少有一个非簇索引,两个数据库服务器上的RAID阵列存储数据文件,你想设置表和索引以取得最佳的I/O性能。
     你在每个RAID阵列上建立了一个文件群,下一步你将作什么?
a.设置频繁的互相连接的表加入同一个文件群,设置经常存取的表和所有的属于这些表的索引到另一个文件群。
b.设置频繁的互相连接的表加入同一个文件群,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件群。
c.设置频繁的互相连接的表加入不同的文件群,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件群。
d.设置频繁的互相连接的表加入不同的文件群,设置经常存取的表和所有的属于这些表的非簇索引到同一个文件群。
答案: C.

     2.你是一个数据公司的数据库开发人员,你建立了一个存储了15个不同的高中运动成绩的统计数据库,这些信息将被50个在Web站点上发布运动信息的公司使用,每个公司的站点安排和使用这些统计数据的格式是不同的。
你要将数据打包传送给公司,你将怎么做?
a.使用包含FOR XML选项的SELECT语句提取数据。
b.对SELECT语句返回的数据使用sp_makewebtask系统存储过程来生成HTML数据。
C.对数据库输出的数据建立数据转换服务包,形成使用TAB界定符的文本文件。
d.建立一个使用SEL_DMO的应用程序来提取数据库中的数据,并将这些数据转换到标准EDI(electronic data interchange)文件。
答案: A.

     3.你是一个邮购公司的数据库开发人员,公司有两台使用SQL Server2000的计算机,分别为CORP1和CORP2。CORP1是一台联机事务处理服务器,CORP2存储销售历史数据。CORP2作为一台连接服务器到CORP1上。销售部经理要求你建立一个购买软盘的客户的列表,这个列表将每个月产生一次邮购的奖品,软盘在数据库中的类别ID为21。
你必须从一个名为SalesHistory的表中刷新这个信息,这个文件存储在CORP2的一个数据库上,你要从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.

     4.你是一个保险公司的数据库开发人员,这家保险公司有一个用于保单或保单所有者的多层的应用。保单所有者信息存储在一个名为Owners的表中,下面的语句用于建立这个表,
当保单所有者的信息输入时,若不包括所有者的出生年月,数据库要产生一个错误信息。你要设计一个方法来校验出生日期数据是否填写,没有的情况下要显示错误信息。
你将怎么做?

a.在BirthDate 字段上加上CHECK约束。
b.建立一个规则,并将这个规则绑定在BirthDate字段上。
c.改变Owners表使BirthDate字段不能为空。
d.在Owners表上建立一个触发器校验BirthDate字段。
答案 D

     5.你是公司的SQL Server2000数据库开发人员,你修改了数据库中的几个存储程序来建立销售部的月底报表,程序中包含了从三个或更多的表中提取的数据的复杂查询,所有这些表都至少有一个索引。用户报告说这些月底报表比以前的版本的明显要慢,你要改进这些报表的性能,将怎么做?

a.对每个存储程序建立一个使用DDL的脚本,使用这个脚本统计工作量作为索引调整的Wizard。
b.在SQL Profiler中捕捉每个存储程序的执行信息,使用这个信息文件统计工作量作为索引调整的Wizard。
c.修改用于存储程序的表的索引统计信息。
d.在SQL查询分析器中执行每个存储程序,使用Show Execution Plan选项。
e.在SQL查询分析器中执行每个存储程序,使用Show Server Trace选项。
答案: E.

     6.你设计了用于购买音乐会票的站点的数据库,在买票的过程中,用户先查看余票的列表,决定是否购买;余票的列表对应于一个指针。对于流行音乐会,可能数以千计的观众可能在同时购票,由于这个原因,你必须允许尽量多的对数据的同时存取。你将怎样设计这个指针?

a.建立基于外在事务的指针,并设置事务孤立处理级别为REPEATABLE READ.
B.建立使用乐观的并发性和立即修改的指针,在指针中,设置外在事务的属性为立即修改。
c.建立使用乐观的并发性的指针,在指针中,使用UPDATE语句并置为在WHERE语句处直接修改关键字,并将UPDATE语句置于内在事物的处理中。
d.建立使用位置修改的指针,包括SCROLL_LOCKS参数定义强制的悲观的并发性。在指针中,设置内在事物的UPDATE属性。
答案: B.

     7.你是一个集装箱制造公司的数据库开发人员,公司制造的集装箱有不同的尺寸和形状,存储的集装箱信息的表有Size、Container、Shape,如图所示。

数据存储在表中的例子如下图所示。



一般来说,集装箱的尺寸周期性的改变,数据库的用户需要知道集装箱的容量,容量是基于Shape、size表中的数据计算得到的。你要隐藏计算的细节,使用一个SELECT查询可以方便的得到,你将怎么做?

a.建立一个用户定义的函数,使用ContainerID作为参数,返回集装箱的容量。
b.建立一个程序,使用ContainerID作为参数,返回集装箱的容量。
c.在Container表中加入名为volume的一列,当一个新集装箱加入表中时,建立一个触发器计算和存储这列的值。
d.在Container表中加入一个计算过的列计算集装箱的容量。
答案: A.

     8.你是一个大型旅游公司的数据库管理员,公司的每个部门的信息存储在名为Department的表中,公司的旅游代理和部门经理的信息存储在名为Employees的表中,其中的SQLLogin字段包括了旅游代理或部门经理的登录数据库的口令,如图所示。

每个部门经理都被加入管理数据库成员。你需要允许这个数据库的成员察看department表,成员只有对自己部门的记录有增加或修改的权力。你赋予管理数据库的成员以查询Department表的权限,下一步做什么?

a.在Department表上建立一个触发器,检查登录数据库、执行插入修改操作的用户是否是那个部门的成员。
b.建立一个包含Department表所有字段和Employees表中的SQLLogin字段的视图。
c.在视图定义中包括WITH CHECK OPTION选项。
d.在Department表中赋予INSERT和UPDATE的权限。
e.在Employees表中的SQLLogin字段上赋予INSERT和UPDATE的权限。
答案: B.

     9.你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:
CREATE PROCEDURE get_sales_for_title
%title varchar(80), @ytd_sales int OUTPUT
AS
SELECT @ytd_sales = ytd_sales
FROM titles
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.你是一个保险公司的数据库开发人员,公司的保单信息存储在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 UPDATE触发器替代DEFAULT约束条件产生一个新的保单号,并将这个保单号插入数据表中。
答案: A.

     11.你是一个公司的关于工作时间报告的数据库开发人员,一般平均有5个用户同时存取这个数据库,并且查询时间要小于1秒。然而,在周五下午或周一早上,大部分雇员输入他们的考勤数据时,数据库可能会有同时50个用户使用,这时,查询返回时间平均是15到20秒。
你需要发现查询变慢的原因并解决这个问题,你将怎么做?

a.使用sp_lock和 sp_who系统存储过程发现锁定的资源,并确定占用锁的进程,使用这个信息确定和重新设计导致资源锁定的事务处理。
b.查询sysprocesses和sysobjects系统表,发现死锁的资源,并确定占有这些资源的进程,对死锁的资源设定一个更短的进程占有时间限制。
c.查询sysprocesses系统表,发现那些资源被存取,在所有这些被存取的表的主关键字加上一个簇索引。
d.使用sp_monitor系统存储过程发现哪个进程导致查询反映时间增加,对这些进程设置更小的限制事务隔离级别。
答案: A.

     12.你是一个Trey研究所的数据库开发人员,你设计了一个供众多公司使用的分布式的SQL Server 2000数据库。在数据库中包括保密信息的存储过程,要防止别的公司看到这些保密的信息,你将怎么做?
a.从syscomments系统表中删除存储过程的文本。
b.对存储过程的文本加密。
c.拒绝syscomments系统表中对public用户的SELECT权限。
d.拒绝sysobjects系统表中对public用户的SELECT权限。
答案: B.

     13.你是Woodgrove 银行的数据库开发人员。公司的销售数据储存在一个SQL服务器中。你想在这个数据库中创建索引视图。为了达到这个目的,你执行了以下脚本。

索引创建失败,你收到错误信息。你想忽略这个错误信息并创建索引。你应该怎么做?

a.在视图中添加ORDER BY 从句。
b. 在视图中添加HAVING 从句。
c. 将NUMERIC_ROUNDABORT 选项设置为ON。
d. 将索引转变成一个唯一的,非簇索引。
e. 在视图中添加WITH SCHEMABINDING选项。
答案: E.

     14.你是公司里SQL Server 2000数据库的开发人员。你正在删除数据库中再也不会使用的对象。但是你无法删除1997Sales 视图。检查后你发现这个视图有以下特征:
视图中有簇索引
销售数据库角色对该使徒有权限。
该视图启用了WITH SCHEMABINDING 选项。
一个schema-bound 在线函数引用了该视图。
在该视图中定义了INSTEAD OF 触发器。

那么要删除这个视图,你该怎么办?
a. 删除该视图中的簇索引。
b. 删除视图中的所有权限。
c. 删除视图中的WITH SCHEMABINDING 选项。
d. 删除引用该视图的函数的WITH SCHEMABINDING 选项。
e. 不启用视图中的INSTEAD OF 触发器。
答案: D.

     15.你是Woodgrove 银行的数据库开发人员,管理一个名叫Accounts 的数据库。另一个开发人员正在为银行创建多层应用程序。银行的职员将使用这个程序来管理客户帐户信息。这位开发人员需要从Accounts数据库中获得客户名并将这些名字放入程序中的下拉菜单中。程序的用户将使用这个列表框找到客户帐户。该数据库包含超过50,000个客户帐户,因此,这个开发人员只想得到其中的25行作为列表框的用户名册。当前客户列表必须在任何时候都可以得到。你要给这位开发人员推荐实现该下拉列表框的方法。你应该给出什么建议?
a. 建立一个储存进程来取得要加载到列表框中的所有数据。
b. 使用服务器边API指针取得要加载到列表框中的数据。
c. 使用SELECT 命令立即获得所有数据,然后将数据加载到列表框中。
d. 使用Transact-SQL 服务器边指针取得要加载到列表框中的数据。
答案: B.
    
     16.你是一个在线图书零售商的数据库开发人员。客户使用公司的网站购买图书。输入定单的时候,这些定单被插入一个名叫BookOrders的数据库。在每夜的批处理过程中,定单信息传送到一个名为Reports的数据库。这个Reports数据库包含一个名为Order的表和一个名为LineItem的表。Order表包含了定单的基本信息。LineItem表包含了定单的单个项目信息。Order表和LineItem表如图所示。

客户必须能够使用公司的网站查看储存在Reports 数据库中的定单。
客户应该只能查看他们自己的定单。
客户不能修改定单。定单的主键值和客户是不相关的,而且客户不应该看见。
你该怎么办?
a. 创建一个视图显示客户的订购信息。.
b. 创建一个储存进程获取客户的订购信息。
c. 创建一个数量的用户定义的函数来获取客户的订购信息。
d. 为客户赋予Order表和LineItem表的SELECT 权限
答案: B.

     17.你是公司SQL Server 2000在线事务处理数据库的数据库开发人员。你已经写了几个储存进程来生成重要的销售报告。这些储存进程访问现有的被索引的表。在你把储存进程放入生产环境中之前,你想确保新的储存进程的最佳表现。你也希望确保数据库的日常操作不会受到不利的影响。
你该怎么办?
a. 为储存进程中包含的每个查询创建覆盖索引。
b.为储存进程中包含的每个查询创建一个包含WHERE 从句中所有列的索引。
c.使用索引调谐向导的输出来确定是否添加索引。
d.为各查询的SELECT和WHERE 从句中的所有列创建统计表。
答案: C.

     18.你是公司SQL Server 2000的数据库开发人员。另一个名为Andrea的数据库开发人员需要在数据库中更改几个现有视图的能力。但是你希望阻止她查看或改变表中的任何数据。目前,Andrea只属于公共数据库角色。
     你该怎么办?
a. 将Andrea 添加到db_owner 数据库角色中。
b. 将Andrea 添加到db_ddladmin 数据库角色中。
c. 赋予Andrea CREATE VIEW 权限。
d. 赋予Andrea ALTER VIEW 权限。
e. 赋予Andrea 对表的REFERENCES权限。
答案: B.

     19.你作为一个IT咨询公司的数据库开发人员,正在设计数据库来记录潜在咨询者的信息。你为数据库创建了一个名为CandidateSkills 的表。该表如图所示。

你应该怎样鉴别各咨询者的技能?
a. 在CandidateID列中创建PRIMARY KEY 约束。
b. 在CandidateID和DateLastUsed列中创建PRIMARY KEY 约束。
c. 在CandidateID和SkillID列中创建PRIMARY KEY 约束。
d. 在CandidateID,SkillID和DateLastUsed列中创建PRIMARY KEY 约束。
答案: C.

20.你是一家医院的数据库开发人员。你在设计一个SQL Server 2000数据库来容纳医生和病人的信息。这个数据库包含一个Physicians表和Patients表。一个医生可以治疗多个病人。病人有一个主医师,通常也要一个副医师。Physicians表内不能超过两百万行。你希望在从表中选取数据时增加I/O输入输出效率。这个数据库应按照第三方正规格式来格式化。
你应该使用哪个脚本来Create Table ?

a. Create Table Physicians
(
Physicians ID int NOT NULL CONSTRAINT PK_Physicians PRIMARY KEY CLUSTERED,
LastName varchar(25) NOT NULL,
)
GO
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
(
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.

21.你是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表。Employee表如下图所示。
你需要尽快进行导入,怎么办?

a. 使用SQL-DMO和Microsoft Visual Basic脚本编辑器来创建Table对象。用Table对象的ImportData方法加载该表。
b. 使用SQL-DMO和Microsoft Visual Basic脚本编辑器来创建Database对象。用Database对象的CopyData方法加载该表。
c. 使用数据转换服务和Microsoft Visual Basic脚本编辑器来创建Package对象。为该文本文件创建Connection对象。在Package对象中添加BulkInsertTask对象。用Package对象的Execute方法加载该表。
d. 使用数据转换服务和Microsoft Visual Basic脚本编辑器来创建Package对象。为该文本文件创建Connection对象。在Package对象中添加ExecuteSQLTask2对象。用ExecuteSQLTask2对象的Execute方法加载该表。
答案: C.

     22.你是一家跨国公司的数据库开发人员。公司有一个在线事务处理数据库,位于一台SQL Server 2000的机器上。该数据库有一个Sales表,包含公司的综合销售信息。去年一年中,Sales表里添加了150,000多行。数据库的用户报告说这一年里数据库的性能在不断下降。你需要提高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.

     23.你是一家生产在线电话目录的公司的数据库开发人员。PhoneNumbers表如图。

将100,000个名字加载到表中后,你使用以下脚本创建了索引:
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

你在测试该数据库的性能。你注意到如下的查询花了很长的时间执行:
返回居住在某个城市的姓以W开始的所有人的姓名和电话号码。
你应该如何提高这类查询的处理性能?
(各正确答案提供了解决方案的一部分。选择两个正确答案。)

a. 改变PRIMARY KEY 约束为使用LastName列,后面跟着FirstName列。
b. 在City列中添加非簇索引。
c. 在AreaCode, Exchange, 和Number列中添加非簇索引。
d. 从PhoneNumberID列中删除唯一索引。
e. 改变PRIMARY KEY 约束为非簇索引。
f. 在SQL查询分析器中执行UPDATE STATISTICS FULLSCAN ALL 命令。
答案: A, B.

24.你是一家大型电子设备公司的数据库开发人员。公司划分成一个个部门,公司的各职员被指派到部门。你创建了一个Employee表来包含所有职员的信息,以及他们属于哪个部门。下图是用来创建Employee表的脚本。

各部门经理应能只读Employee表中属于其部门的职员信息。你该怎么做?

a. 使用GRANT, REVOKE, 和DENY命令给各部门经理分配权限。
b. 在db_datareader 固定数据库角色中添加各部门经理的数据库登录。
c. 建立表和视图来加强Employee表的行级安全性。
d. 使用SQL 服务器企业管理器在Employee表中分配权限。
答案: C.

     25.你是Contoso公司的数据库开发人员.公司的的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
答案: C.

     26.你是公司的SQL Server2000 数据库的管理员.这个数据库安装在一个Microsoft Windows 2000 Server上.数据库是默认配置.数据库上所有的表至少拥有一个索引.服务器上运行的唯一应用程序就是SQL Server.每天中,当销售代表进入并更新销售事务的时候,数据库的活动达到了峰值.一组报告在商务时间后进行,销售代表报告更新和插入缓慢.
你该怎么做?
a.在SQL Server上运行系统监视器中的Access Methods 计数器.使用系统监视器中的输出来标识需要索引的表.
b.使用sp_configure系统存储过程来增加在SQL Server上的lcok的数量
c.全天运行SQL Profiler,选择SQL:BatchCompleted和RPC:Completed事件, EventClass和TextData数据列.使用SQL Profiler的输出作为到Index Tuning Wizard.的输入.
d.增加最小服务器内存选项的值
e.重建索引,使用值为100的FILLFACTOR
答案: C.

     27.你是一个玩具厂的数据库开发人员.公司的每个雇员都被指派到executive, administrative或者labor三个职位.公司内部网络的主页上的新闻是为各个不同职位类型而自定义的.当雇员登录到公司内部网,主页确认员工的职位类型然后显示对应的新闻.公司新闻存储在命为News的表上,而表位于公司数据库上.用于创建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.为每一个职位类型在EmpoyeePositionType列上赋予一个SELECT权限.
d.为每一个职位类型在News表上赋予权限.
答案: B.

     28.你是一家电话调查用户音乐喜好的公司的数据库开发人员.当从用户接受到调查回应的时候,这些回应被插入到一个名字为SurveyDate的表中.当收到所有的调查回应之后,产生结果概要.你需要在每五行调查回应中取样来创建一个调查概要.你必须尽快产生这个调查概要.
你该怎么做?
a.使用指针重新获得所有数据,使用FETCH RELATIVE 5语句来从指针选择数据概要.
b.使用SELECT语句重新获得调查数据并放到一个临时表中.
c.设置查询rowcount为5.使用SELECT语句重新获得数据并总结这些调查数据
d.使用SELECT TOP 5 语句来重新获得数据并总结这些调查数据
答案: A

     29.你是SQL Server 2000数据库管理员.你创建了一个存储过程为销售部门产生EndOfMonthSales报告.你发布了以下的语句来给EndOfMonthSales报告分配权限:
GRANT EXECUTE ON EndOfMonthSales TO SalesDept

Andrea刚刚加入销售部门,并且是SalesDept角色的一名成员.Andrea也是Marketing角色的一名成员,Marketing角色没有访问EndOfMonthSales报告的权限.Andrea无法执行存储过程.其他销售部门的员工没有这种经历.
你该怎么做?

a.添加Andrea到db_datareader数据库角色,为公共角色赋予REFERENCES权限.
b.把Andrea从Marketing数据库角色中删除.
c.在与存储过程相关的表上,赋予Andrea的数据库用户账号SELECT权限
d.在与存储过程相关的表上,赋予Andrea的数据库用户账号REFERENCES权限
答案:B

     30.你是一个咨询服务提供公司的数据库开发人员,这个公司员工信息在名字为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.创建一个视图,然后建立一个convering索引
e.创建用户自定义函数返回包括非行政人员的表.
答案:B

     31.你是一个保险公司的数据库开发人员.你正在调整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

你在查询菜单选择了”显示可以评估的执行计划”. 查询执行计划生成如下:

你该怎么做?

a.重写查询并加入BETWEEN关键字
b.在查询中加入join 线索并包括HASH选项
c.在Policy表中添加WITH (INDEX(0))表线索
d.在Policy表上静态更新
e.在Policy表上执行DBCCDBREINDEX语句
答案:D

     32.你是一个数据库顾问,受雇于一个当地的宠物犬饲养商并要求你开发一个数据库.这个数据库将会用来存储这个饲养商宠物犬的信息.你使用以下的脚本创建了一个名字为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列的有效值.你想要在最小的磁盘输入输出中实现这个原则.
你该怎么做?

a.在Dogs表上,创建一个AFTER INSERT触发器用来压缩MotherID和FatherID列上的事务.
b.在MotherID和FatherID列上创建一个表级的CHECK约束.
c.创建两个FOREIGNKEY约束:一个在MotherID列上,还有一个在FatherID列上.指定每个约束关联DogID列.
d.创建一个规则并绑定到MotherID上,然后绑定同样的规则到FatherID列上.
答案:C

     33.你是Proseware公司的数据库开发人员.公司有一个数据库包含了公司地理位置的信息,这些信息中还包含了对应的邮政编码.这个信息包含在数据库中的company表中.当前的数据库为五个不同的邮政编码包含了公司数据.在一个特定的邮政编码范围的公司的数量是10到5000,随着时间的过去,更多的公司的和邮政编码将会添加到这个数据库中.你创建了一个查询来从数据库中发挥信息.你需要通过在数据库上进行最小的改动来提供新的数据.查询必须不能收到返回的公司的数量的影响.你想要创建一个查询来履行一贯和最小的未来维护.你该怎么做?

a.创建一个存储过程,这个存储过程需要一个邮政编码作为参数.当这个过程创建的时候,包括WITHRECOMPILE选项
b.为每个邮政编码创建存储过程
c.为每个邮政编码创建视图
d.把Company表分成多个表以便每个表包含一个邮政编码.在表上建立一个分开的视图,这样可以作为一个单独的表来查看数据
答案: A

     34.你是电力公司的数据库开发人员.当用户没有按时结算帐单差额,帐单差额每天会增加1%知道差额付清.公司需要跟踪迟到帐单的数量.你创建了一个存储过程来更新差额和报告迟到帐单的数量.这个存储过程如下图所示:

每次存储过程无错执行的时候,返回无迟到帐单.但是,你观察到这个差额还在继续增加.
不该怎么解决这个问题?

a.用Return @@ROWCOUNT语句来替换存储过程的第12-17行
b.用DECLARE @count int
Replace lines 12-17 with the following:
SET @Count = @@ROWCOUNT
If @@ERROR = 0
Return @Count
Else
Return –1
语句来替换存储过程中的5-6行
c.用DECLARE @Err int, @Count int
Replace lines 12-17 with the following:
SELECT @Err = @@ERROR, @Count = @@ROWCOUNT
IF @Err = 0
Return @Count
Else
Return @Err
来替换存储过程中的12-17行

d.用Return @@Error替换存储过程中的第5行

e.用DECLARE @Err int, @Count int
Replace line 9 with the following:
SET Balance = Balance * 1.01, @Count = Count (*)
Replace line 15 with the following:
Return @Count
替换存储过程中的第5行
答案:C

     35.你在为Tailspin Toys设计一个数据库,你回顾了一下数据库的设计,如下图所示:

你想要为查询和最小话多于数据实现快速的响应.你该怎么做?

a.创建一个新的表名字为CustomerContact,添加CustomerID,ContactName和Phone列
b.在OrderDetails表中创建一个新的合成PRIMARYKEY约束,约束中包括OrderID,ProductID和CustomerID列
c.在OrderDetails表中删除PRIMARYKEY约束,使用IDENTITY为OrderDetails表创建一个代表键
d.从OrderDetails表中删除CustomerID列.
e.从OrderDetails表中删除Quantity列.添加Quantity列到Orders表中
答案: D.

     36.你是一个图书商店的数据库管理员,每个月你都会在厂商那里以XML文档的形式收到新的供货信息.XML文档显示如下:

你需要设计一个存储过程来读取XML文档的信息,并在名为Products的表中插入信息.这个Products表如下所示:
你将要使用哪段脚本实现存储过程?
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
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.

     37.你是一家向全世界输出产品的销售体育用品公司的数据库开发者。公司在一个名叫 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.

     38.你是一家服装销售商的数据库开发员。公司有一个名叫 Sales 的数据库。这个数据库包括一个名叫 Inventory 的表。Inventory 表包括了销售项目列表和为这些项目可用的数量列表。当有销售信息插入到这个表中的时候,这个表被更新。更新 Inventory 表的存储过程显示如下图。

CREATE PROCEDURE UpdateInventory @IntID int
AS
BEGIN
DECLARE @Count int
BEGIN TRAN
SELECT @Count = Available
FROM Inventory WITH (HOLDLOCK)
WHERE InventoryID = @IntID
IF (@Count > 0)
UPDATE Inventory SET Available = @Count – 1
WHERE InventoryID = @IntID
COMMIT TRAN
END

当这个存储过程执行的时候,数据库服务器有时会返回如下的错误信息:
事务(Process ID 53)和另一个过程在资源上死锁,并且已经关闭了死锁受害者。返回事务。
为了维护数据库的完整性,你需要阻止这个错误信息的出现。你应该怎么做呢?
a.删除提示的表。
b.改变提示表为 UPDLOCK。
c.改变提示表为 REPEATABLEREAD。
d.设置事务隔离级别为 SERIALIZABLE。
e.设置事务隔离基本为 REPEATBLEE READ。
答案: B.

     39.你是一家海运公司的数据库开发员。你使用 SQL Server 2000 数据库来存储信息。数据库包括 Order 和 OrderDetails 表。数据库所安装的计算机有 9-GB 可用空间来存储数据。这台计算机有两个硬盘控制器。每一个硬盘控制器有两个驱动器。Order 和 OrderDetail 表经常被查询。

你需要调整数据库性能。你应该怎么做呢?(每一个正确答案都是解决方案的一部分。选择两个)

a.在这四个磁盘驱动器上,在每一个上都创建一个新的文件组。
b.在与非簇索引相隔离的文件组内为 Order 表创建一个簇索引。
c.在一个文件组内为 OrderDetail 表存储数据和簇索引,在另一个文件组内创建非簇索引。
d.创建 Order 表,并将它的索引放在一个文件组内,创建 OrderDetail 表,并将它的索引放在另一个文件组内。
e.创建两个文件组,每一个文件组包括连接在相同的控制器上的2个磁盘驱动器。
答案: D, E.

     40.你是一家真空吸尘器销售公司的数据库开发员。公司有一个名叫 Sales 的数据库,这个数据库包含 VacuumSales 表和 Employee 表。销售信息存储在 VacuumSales 表中。员工信息存储在 Employee 表中。Employee 表中有一列叫 IsActive。这个列显示了员工当前是否被雇佣。Employee 表还包括了一列 EmployeeID,唯一标示了每一个员工。所有被输入 VacuumSales 表的销售信息都包括当前所有被雇佣员工的 ID。
你怎样强制这一要求?

a.使用 微软分布事务处理协调 来收在分部事务处理中的集员工表,假如员工ID 没有激活的时候,它将回滚所有事务处理。
b.在 VacuumSales 表中的 EmployeeID 列上增加 CHECK 约束。
c.在 VacuumSales 表中的 EmployeeID 列上增加外键约束,关联到 Emoployee 表的 EmployeeID 列。
d.在 VacuumSales 表中增加一个 FOR INSERT 触发器。在触发器中,使用 基于 EmployeeID 列的Inserted 表,加入 Employee 表,并且测试 IsActive 列。
答案: D.

     41.你是一家经纪人公司的数据库开发员。这个数据库包括一个名为 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 表都要发生频繁的插入和更新。表的报告每天晚上运行。你在 SQL 查询分析器中执行如下的代码:
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.在簇索引上执行 DROP STATISTICS 命令。
d.在主键索引上执行 DBCC INDEXDEFRAG 命令。
e.在主键索引上执行 DROP INDEX 和 CREATE INDEX 命令。
答案: A.

     42.你是你公司的 SQL Server 2000 数据库的开发员。你使用如下的脚本在数据库中创建一个名叫 Employee 的视图;

CREATE VIEW Employee AS
SELECT P.SSN, P.LastName, P.FirstName, P.Address, P.City, P.State,
P.Birthdate, E.EmployeeID, E.Department, E.Salary
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.

     43.你是一家在线经济公司的数据库开发员。SQL Server 2000 数据库中维护了股票持有者的股票价格。允许跟踪股票价格的历史记录,所有的股票价格的更新必须被记录。为了帮助正确解决关于价格更新的问题,任何发生在更新时候的错误都必须被记录。当错误被记录时,标示股票处理的错误信息必须被返回给客户应用程序。
你必须确保记录适当的条件,并且产生适当的消息。你应该使用那个过程呢?

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) + ‘.’
EXEC master. . xp_LOGEVENT 50001, @Msg
END
ENDb.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) + ‘.’
ENDc.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) + ‘.’
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
ENDd.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.

     44.你是一个名为 Inventory 的数据库开发员。你必须创建报告列表。这些报告将在同一时刻运行。你写下了创建每一个报告的查询。基于查询,你设计并创建了数据库表索引。
你想要确保你创建了可用的索引。你应该怎么做呢?

a.创建一个 SQL Profiler 跟踪,并使用 Objects 事件类。
b.根据一个在报告中使用查询的工作量文件来运行索引调整向导。
c.运行系统监视器,并使用 SQLServer:Access Methods 计数器。
d.根据在 SQL 查询分析器中的表来执行查询,并且使用 SHOWPLAN_TEXT选项。
答案: B.

     45.你是你公司的人力资源数据库的开发员。这个数据库包括了一个名为 Employee 的表,这个表包含了机密信息,员工 ID 和薪水信息。表同样也包括了非机密信息,比如员工的名字和地址。
你需要使员工的所有的非机密信息在外部应用程序XML格式下可用。外部应用程序能够被指定为 XML 格式数据。同时你需要对外部应用程序隐藏机密信息。
你应该怎么做呢?

a.创建一个存储过程,从 Employee 表中返回 XML 格式的非机密信息。
b.创建一个用户定义函数,从 Employee 表中返回非机密信息的行集合。
c.创建一个视图,仅仅包括 Employee 表的非机密信息。给外部应用程序根据视图提交查询的权限。
d.在 Employee 表中设置行级别的许可权限,阻止外部应用程序从视图中查询包含重要信息的列。给外部应用程序根据视图提交查询的权限。
答案: C.

46.你是一家保险公司的数据库开发员。公司有一个名为 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.

47.你是一家悬尾降落玩具公司的数据库开发员。你有两个 SQL Server 2000 计算机,名字分别为 CORP1 和 CORP2。这两天计算机都使用 SQL Server 认证。 CORP2存储已经在 CORP1 中的存档数据。在每个月末,数据将从 CORP1 中移除,并且转移到 CORP2上。
你正在设计一个季度报告,将包括 CORP1 和 CORP2 的所有数据。你想要使用尽可能快的分布查询。
你需要采取哪桑步骤?(每一个正确的答案都是解决方案的一部分。选择三个。)
a.创建一个存储过程,使用 OPENROWSET 命令来重新找回数据。
b.创建一个存储过程,在 CORP2 上使用完全标准表名来重新找回数据。
c.创建一个使用 OPENQUERY 命令的脚本来重新找回数据。
d.在 CORP1 上,执行 sp_addlinkedserver 系统存储过程。
e.在 CORP1 上,执行 sp_addlinkedsrvlogin 系统存储过程。
f.在 CORP2 上,执行 sp_serveroption 系统存储过程,并且设置 collation compatible 为 ON。
答案: B, D, E.

     48.你是 Proseware 有限公司的数据库开发员。你为公司的人力资源部门实现了一个数据库。这个数据库将存储员工信息。你创建一个名为 EmployeeContact 的表,包含了如下的列:
HomePhone, BusinessPhone, FaxNumber, 和 EmailAddress
你必须确保每一个记录包含都 HomePhone 或者 BusinessPhone 列的值。你应该怎么做呢?

a.创建一个不允许非空值的规则。在 HomePhone 和 BusinessPhone 列绑定规则。
b.创建一个规则,在 HomePhone 和 BusinessPhone 列阻止空值输入。将规则绑定在表上。
c.在 HomePhone 和 BusinessPhone 列上增加 CHECK 约束,阻止空值输入。
d.在表上增加 CHECK 约束,在 HomePhone 和 BusinessPhone 列上输入的值最少有一个是非空可用值。
e.创建一个触发器,统计输入到 HomePhone 列的没有值的记录数,然后统计输入到 BusinessPhone 列的没有值的记录数,配置触发器来查找一个或者更多的符合这个条件的行,触发器将数据更正。
答案: D.

     49.你是一家保险公司的数据库开发员。公司的区域办公室传输他们的销售信息 XML 格式文档到公司的总部办公室。这些 XML 格式文档将存储在名为 SalesXML 表中,所有数据存放在 SQL Server 2000数据库中。包含在 XML 文档中的数据包括保险代理商的名字、保险政策业主的名字、保险政策受益者的信息和其他的关于保险政策的细节信息。你已经创建了一个表来存储从 XML 文档中提取出来的信息。
你需要将这些信息从 XML 文档中提取处理并且存储到表中。你应该怎么做呢?
a.使用包括 FOR XML AUTO 子句的 SELECT 命令来将数据从 XML 文档中拷贝到可用的表中。
b.使用包括 FOR XML EXPLICIT 子句的 SELECT 命令来将数据从 XML 文档中拷贝到可用的表中。
c.使用 OPENXML 函数访问数据并且将数据插入到可用的表中。
d.在 SalesXML 表中简历可用的视图来显示 XML 文档的内容。使用 SELECT INTO 命令将数据从这个视图提取到可用的表中。
答案: C.

     50.你是一家飞行玩具公司的数据库开发员。公司在它的 SQL Server 2000 数据库中跟踪存货情况。你有几个查询和存储过程被执行在数据库索引上,所用查询已被创建。存货目录项目已经增长一定的数量,一些存储过程的执行时间也迅速增长。其他的查询和存储过程访问数据库中相同的信息,没有执行时间的增长。
你必须恢复这些执行慢的的存储过程的性能到最初始的状态。你应该怎么做呢?

a.经常使用 WITH RECOMPILE 选项来执行运行慢的存储过程。
b.为每一个执行慢的存储过程所访问的表执行 UPDATE STATISTICS 命令。
c.为每一个执行慢的存储过程执行 sp_recompile 系统存储过程。
d.为每一个执行慢的存储过程所访问的表执行 DBCC REINDEX 命令。
答案: C.