资源描述
SQL Server数据库程序设计认证试题
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 选项
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属性
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
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表。数据存储在表中的示例如图所示
在表中数据存储的实例如图中资料所示,
集装箱的大小定期地改变。数据库用户经常需要一集装箱的体积。集装箱的体积是根据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系统存储过程来确认增加的查询时间影响了哪个进程。为该进程设置一个限制性较小的事务隔离级别。
答案: 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
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 的视图。 在创建视图之后,你授权具有销售角色的成员允许查询。当销售角色的成员尝试从视图中取回数据的时候,他们接收以下错误信息:
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 表如下所示:
客户必须使用公司的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选项。
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 表中供以后分析。例如,可以对生产环境进行监视,了解执行速度太慢而妨碍性能的存储过程。通过监视 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
展开阅读全文