《数据库程序设计与实现题库(107)(84页).doc》由会员分享,可在线阅读,更多相关《数据库程序设计与实现题库(107)(84页).doc(83页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-Q.1你是一个数据公司的数据库开发人员,你建立了一个存储了15个不同的高中运动成绩的统计数据库,这些信息将被50个在Web站点上发布运动信息的公司使用,每个公司的站点安排和使用这些统计数据的格式是不同的。你要将数据打包传送给公司,你将怎么做?A使用包含 FOR XML选项的 SELECT语句提取数据。B对SELECT语句返回的数据使用sppoakewebtask系统存储过程来生成HTML数据。C对数据库输出的数据建立数据转换服务包,形成使用TAB界定符的文本文件。D建立一个使用SELMMO的应用程序来提取数据库中的数据,并将这些数据转换到标准EDI(electronic data inter
2、chmp)文件。答案: A。 解释: 数据将会在公司的网站被出版。 可扩展标示语言是文件的一种涨价语言包含结构化数据。 可扩展标示语言被很好地适合提供富有的网文件。 SQL 疑问能归还结果如可扩展标示语言不愿标准 rowsets。 这些疑问直接地可能被运行或从在里面储存的程序。 直接地取回结果, 那因为挑选出来的陈述可扩展标示语言子句被用。 在那里面因为可扩展标示语言子句一个可扩展标示语言模态可能被叙述。 这些可扩展标示语言模态是生的,汽车, 或露骨的。 不正确的答案: B:被储存程序的 sp_makeweb 用来归还造成 HTML 格式不愿如标准的 rowsets。 可扩展标示语言是比 HT
3、ML 一个较复杂的格式而且在这一种情形中被因此。 C: 一个定位键定界限的文件可能在支援定位键定界限的文件, 像是微软的任何试算表中被分析胜过。 对网站是适当的这格式 isn 抰,然而。 D: SQL- DMO 为创造数据没被用以可能在网站上被出版。 注意:SQL- DMO 是被分配管理物体并且装入胶囊在 SQL服务器 2000个数据库中被发现的物体 SQL 的短。它允许在支援自动化或 COM 管理一个 SQL服务器安装的所有部份的语言中被写的申请;也就是, 它是用产生申请能运行管理的责任。Q.2你是一个邮购公司的数据库开发人员,公司有两台使用 SQL Server2000的计算机,分别为CO
4、RP1和CORP2。CORP1是一台联机事务处理服务器,CORP2存储销售历史数据。CORP2作为一台连接服务器到CORP1上。销售部经理要求你建立一个购买软盘的客户的列表,这个列表将每个月产生一次邮购的奖品,软盘在数据库中的类别ID为21。你必须从一个名为SaleSHistory的表中刷新这个信息,这个文件存储在CORP2的一个数据库上,你要从CORP1上执行这个查询,你将使用哪条脚本语句查询?答案: C。 解释: 本例中仅需使用一个带WHERE从句的简单的SELECT FROM语句。通常这种代码具有如下所示的形式: SELECT CustomerID FROM SalesHistory W
5、HERE CategoryID = 21 然而 SalesHistory 数据表位於另外一个服务器上。该服务器已经被设置为一个链接服务器,因此我们能够直接的运行分布式查询。我们必须使用由下列四部组成的名称: 1. Name of server 2. Name of database 3. DBO 4. Name of table 本例中可表示为: CORP2.Archive.dbo.SalesHistory 注意: sp_linkedserver 为了要建立一个被联编的伺候器,sp_linkedserver 指令能被用。 语法: sp_addlinkedserver server = serv
6、er , srvproduct = product_name , provider = provider_name , datasrc = data_source , location = location , provstr = provider_string , catalog = catalog 不正确的答案: A:该链接服务器已经设置成功,无须再行设置。B:OPENROWSET不被用来访问链接服务器。OPENROWSET方法是用来访问链接服务器中的表的一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。D:sp_addserver 不是一个有效的储存过
7、程名。 Q.3你是Trey 研究所的数据库开发人员。 你建立了二个处理事务用于将员工数据输入到公司的数据库内。其中一个处理事务处理很重要,用于插入职员名字和地址信息到数据库内。 另一个处理事务插入职员人口统计学的数据进数据库之内。这个处理事务比较不重要。 数据库管理员已经通知你数据库服务器在使用高峰期间有时会遇到错误。每当这种情况发生时,数据库服务器将任意地结束这两个处理事务之一。 你必须确定当数据库服务器结束这些处理事务之一的时候,它从不结束较重要的处理事务。 你应该做什么?A. 把插入雇员姓名和信息的事务的DEADLOCK_PRIORITY 设置为LOW B. 把插入雇员人口统计学信息的设
8、置事务的DEADLOCK_PRIORITY 为LOW C. 为插入雇员姓名和地址信息的事务添加条件代码来检查事务是否发生服务器错误1205。D. 在交易之内增加ROWLOCK 优化器提示数据操作SQL 声明。E. 插入雇员姓名和地址信息的事务的交易隔离级设置为SERIALIZABLE。Answer: B. 解释:我们将会出现一个死锁的问题。交易任意地被终止。我们有两个典型的事务:l 插入雇员姓名和地址信息的重要事务l 插入雇员人口统计信息的较不重要事务l 需求指的是当数据库服务器结束些事务时,它从不结束比较重要的事务。 如果把较不重要的事件的DEADLOCK_PRIORITY设置为LOW ,该
9、事务将会优先成为死琐牺牲者。当死琐发生在一重要的和一个较不重要的事务,较不重要的事务将优先成为死琐牺牲者而被结束。 而较为重要的事务将无法被结束。我们不能够预期只有二个事务同时运行。而是可以有许多较不重要的交易和许多重要的交易同时运行。 我们想象二个重要事务发生死锁。在那种情况下,他们的当中一个会被选中为死琐的牺牲者而被终止。但要求在死琐条件下较为重要的事务从未会被终止, 因为两个在这种情况下相等地重要。注: 死锁:在SQL Server 2000中,一个单用户会议也许有一个或更多进程运行来代表它。各进程也许获取或等待获取各种各样的资源,例如锁,平行地询问与实施相关的资源、进程、以及内存。除内
10、存之外,所有这些资源都参加SQL 服务器死锁侦查计划。当两个进程有数据被锁,并且每个进程只有等到其他的进程释放到他们的锁时才能释放掉自己的锁,在这种情况下死琐发生。死锁侦查是由一个称为锁监控器的独立进程来执行的。当锁监控器开始一次死锁,首先查寻一个特殊进程,它辨认进程等待的资源。然后找到那些特殊资源的所有者再递归地继续搜寻那些进程直到它发现一个周期。通过这种方式辨认一个周期中的死锁。 在死锁被辨认之后,SQL 服务器通过自动地选择可能打破死锁的进程结束死锁。选上的进程称为死锁牺牲者。SQL 服务器回滚死锁牺牲者的事务,通过返回信息错误信号1205通知进程应用程序,取消进程的当前的请求,允许非打
11、破的进程事件继续。通常,SQL 服务器选择损失最少的进程作为死锁受害者。二者择一,用户能设置处理进程的DEADLOCK_PRIORITY 为LOW。如果设置为LOW, 那该处理进程将优先成为死锁“受害者”。因为插入雇员姓名和地址资料入数据库的进程要比雇员人口统计学信息入数据库的进程重要,所以,将插入雇员人口统计学信息进程的DEADLOCK_PRIORITY置为LOW。不正确答案: A:如果处理进程设置为LOW ,那么该事件处理将优先成为死锁牺牲者。因为在事件处理中,插入雇员姓名和地址信息入库比插入雇员人口统计学信息入数据库的进程重要,所以不应将处理插入雇员姓名和地址信息事件的DEADLOCK_
12、PRIORITY设置为LOW。 C:当某事件进程成为死锁牺牲者,错误1205将返回。系统将为插入雇员姓名和地址信息的事务添加条件代码追加以核对这一个错误,并且指定, 如果遇到这个错误进程会导致进程重新开始。 这会保证, 一个重要进程无法被终止,这就是要求。这种解决方案有一个缺点: 它效率低并且执行不是最好的。最好降低较不重要事务的DEADLOCK_PRIORITY 。D:ROWLOCK 优化器提示是使用列级锁而不是粗糙颗粒状的虚拟表级锁的表提示E:选择最高的交易水平会增加锁的数量。这不能保证某些交易(例如以重要性而言) 从不被锁。 注意:当锁被使用作为同时操作控制方法,并发问题被减少,虽然可能
13、可能有多一一种事务在任何时候同时运行,但是因为并发允许所有交易运行在完全地互相隔离。SQL 服务器2000 支持以下隔离水平: l 未执行读操作是最低的水平,在这种水平下交易被隔绝只保证无效数据不被读;l 执行读操作,是SQL 服务器2000 默认水平; l 反复性读; l 连续性,那是最高的隔离水平。这种高水平下要求并发访问数据库,一切有效的控制方法应该被使用。 Q.4你是公司的 SQL Server 2000联机事务处理数据库的数据库开发人员。许多表有一百万或更多的行,所有的表都建立了一个簇索引,经常存取的表另外还至少有一个非簇索引,两个数据库服务器上的RAID阵列存储数据文件,你想设置表
14、和索引以取得最佳的I/O性能。你在每个RAID阵列上建立了一个文件群,下一步你将作什么?A设置频繁的互相连接的表加入同一个文件群,设置经常存取的表和所有的属于这些表的索引到另一个文件群。B设置频繁的互相连接的表加入同一个文件群,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件群。C设置频繁的互相连接的表加入不同的文件群,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件群。D设置频繁的互相连接的表加入不同的文件群,设置经常存取的表和所有的属于这些表的非簇索引到同一个文件群。答案:C解释:改进数据库性能是通过大量设置存取的表到同一文件群中或者设置表的非簇索引 到不同物理磁盘阵列的文
15、件群中。这中方式将能提高性能因为它允许分开的进程访问表格和索引。当簇索引决定数据在表中的物理顺序时,表和它的簇索引不能分开到不同的文件群内。设置频繁的互相连接的表加入位于不同物理磁盘阵列的文件群,也可以提高数据库性能。此外,创建跟物理磁盘阵列一样多的文件使得每个磁盘阵列对应一个文件,这也可以提高数据库的性能,因为系统为每个物理磁盘对应的文件建立独立的进程,从而平行的读取表数据。文件日志和文件数据也一样,如果可能,可以尽量放置在不同的物理磁盘数组内。错误答案解析: A:设置频繁地互相连接的表在同一文件群中将无法提高性能。它简化需要横跨多个硬盘扇区的复杂读写的使用,从而无法实现平行查询。此外,只
16、有表格的非簇索引可以存在于不同表的不同文件群中。B:前半句错误,理由同上(A)。D:大量设置存取的表以及从属于那些表的非聚簇索引到同一个文件群将不能改进性能。而是设置存取的表以及从属于那些表的非聚簇索引到位于不同物理磁盘的不同文件群中可以实现性能的获取。这样可以提高性能,因为这种方式允许不同进程存取表和索引。Q.5你是公司的 SQL Server2000数据库开发人员,你修改了数据库中的几个存储程序来建立销售部的月底报表,程序中包含了从三个或更多的表中提取的数据的复杂查询,所有这些表都至少有一个索引。用户报告说这些月底报表比以前的版本的明显要慢,你要改进这些报表的性能,将怎么做?A对每个存储程
17、序建立一个使用DDL的脚本,使用这个脚本统计工作量作为索引调整的Wizard。B在SQL Profiler中捕捉每个存储程序的执行信息,使用这个信息文件统计工作量作为索引调整的Wizard。C修改用于存储程序的表的索引统计信息。D在 SQL查询分析器中执行每个存储程序,使用 Show Execution Plan选项。E在 SQL查询分析器中执行每个存储程序,使用 Show Server Trace选项。答案:E解释:多数存放程序已被更新。这些存放程序包括复杂查询。这些新的存取程序比旧的程序性能更差。 我们用SQL 查询分析器的Show Trace选项来分析和调整存储程序。The Show S
18、erver Trace命令提供存取那些用于决定一个查询的服务器端影响的信息。注意1:查询分析器的新的 Show Server Trace选项可以帮助执行调整查询,存储程序或者Transact-SQL脚本。他所做的就是显示查询分析仪(作为SQL 服务器客户) 到SQL 服务器的通信。这种相同类型信息通过SQL Server 2000模型捕获。 注意2:索引调整Tuning Wizard能被用于为SQL Server 2000 数据库选择和创造一个最理想的索引集而不要求了解数据库内部结构,其工作量或者SQL Server内在结构。应该首先建立最理想索引的方案,对工作量也有要求。工作量包括SQL 脚
19、本或SQL Profiler Trace 被保存到文件或表格包含SQL 批或远程过程调用事件簇和事件簇和文本数据专栏。如果现有的索引调整分析工作量不存在,可以创建使用SQL模式。报告输出类型可能被指定在报告对话箱被保存为一个制表符划定的文本文件。 参考: BOL, Analyzing Queries 错误答案解析:A:Tuning Wizard索引必须使用一个工作量,通过SQL 声明产生,作为输入。 Tuning Wizard索引使用存储程序代码作为输入。注意:SQL语言有两个主要区别:数据定义语言,用于定义和处理所用SQL对象;数据操作语言,用于在数据库中选择、插入、删除或者改变表格、视图。
20、数据库定义语言不能用作Tuning Wizard索引工作量。 B:调整索引可以提高存储程序性能。尽管如此,没有数据被改变或者查询很复杂。我们应该是通过Show Server Trace命令来分析一个查询对服务器端的影响。C:数据库索引正确的选择和它的工作量是复杂的、时效性的,而且易出错为复杂性适度的数据库和工作量。如果调整索引最好采用Tuning Wizard索引。D:实施计划能提供每个存储程序如何更好的运行的线索。一个实施计划描述Query Optimizer是怎么计划,或实际优化,一次特殊查询。这信息是有用的,因为它可以帮助优化查询性能。尽管如此,实施计划并不是最好分析复杂查询的方法。Q.
21、6如果你是作为跨国进口商的数据库开发人员。你要创建数据库以存取订购信息。订购将登记客户服务申请。每一时间有一个新的订购申请,唯一订购号将被分配 。订购号必须以上升顺序分配。每天将有10000个订购申请。创建名为Orders的表并添加OrderNumber列到表格中。接下来你将怎么做呢?A.设置数据列的类型为uniqueidentifier。B.设置数据列的类型为int,并设列的属性为IDENTITY 。 C.设置数据列的类型为int。 创造用户定义函数,以选择表格中最大定购数量。 D.设置数据列的类型为int。 创建NextKey表格, 并在表格中增加NextOrder列。设置 NextOrd
22、er列得数据类型为int。 创建一个存储程序重新获得或更新NextKey的值。答案:B. 解释: 在MS SQL Server 2000, 标识符列可通过IDENTITY属性执行,允许数据库设计员为第一行指定标识符插入到表格和增加一个增长值给连续的标识符。当插入数值到带有标识列的表时,MS SQL Server 2000通过递增方式自动产生下一个标识值。一张表格只能有一列定义为IDENTITY 属性,而且这一列必须是定义为整数数字类型(int、smallint、bigint、tinyint),精确数值类型(decimal、 numeric), 以及日期时间数据类型。标识的默认增量为1,因此身份
23、验证码默认为升序排列。错误答案解析:A:MS SQL Server 2000唯一标识符是用于表格复制。在这个过程中确定了一个标识表格中每行被复制的唯一列。这保证了在表格的多个复本中每行能被唯一标识。C:函数是频繁被执行的逻辑子程序。任何必须运行那些函数中未完成的逻辑的代码而不是重复执行所有的逻辑函数。SQL Server 2000提供了两种类型的函数:内部函数和用户定义函数。并有两种用户定义函数:数值用户定义函数,其返回值是数值;内部自定义函数,返回值为表格。D:创建附加表格来跟踪序号在这种情况下是不合适的。它会要求在Orders 表中外键限制OrderNumber 列。在Orders 表格O
24、rderNumber 列自动更新之前,要求首先手动更新。 Q.7你是技术培训中心的数据库开发人员。当前,管理雇员对学生、教师、课程和教室分配是通过报告单进行管理的。现在,中心希望通过数据库对数据进行管理。请你设计数据库的表格,你的设计如下: 现你需要提高查询速度和简化多余数据,你应该怎么处理? A.创建一个新的Instructors表。 包括InstructorID 、InstructorName 、OfficePhone 列。 在Courses 表中添加InstructorID列 。B.把Classroom 表格中所有的列添加到Courses表中,删除Classroom 表。 C.删除Cou
25、rses表中的主键约束,用CourseID和CourseTitle组合为主键,代替原来的主键。D.去掉ClassroomID 列,并建立基于ClassroomNumber 和 ClassTime列的主键。答案: A.解释:一个规范化的数据库必须是高效率的。该数据库的设计并不规范。关于教师资料包含在Courses表内。 当教师课程多于一门时,就需要生成多份的信息资料, InstructorName 和OfficePhone 将登记每门课。我们规范数据库通过以下步骤:建表Instructors;Instructors 表中建立新列InstructorID,这是侯选键。在Courses表中添加Ins
26、tructorName和OfficePhone列。在Courses表中移除InstructorName和Office Phone列。 (如不在该情形)。在Courses表中添加InstructorID列。该列将被用于创建外键限制Instructors表中的InstructorID列。 错误答案解析: B、 从Classroom表中的所有列移到Courses表所只会使情况更糟。 每个学生资料必须输入学生的所有可能信息。这样,我们的数据库将变得更规范。We would have an even more denormalized database. C、删除CourseID表中的主键CourseI
27、D,将CourseID 和CourseTitl列组成主键,代替原来的(CourseID列)主键,将使数据库变得更规范。而且不允许两个课程用相同的课程题目,所以每学期(和每年)学校将为课程输入新的名字。D、改变Classroom的主键并不能改善情况;相反ClassroomID列会变得多余。该程序不解决Courses表格中 InstructorName和OfficePhone列的问题。Q.8你将设计一个数据库包括用户定购。用户将在每次的定购大量的产品时设置一个序号。具体建库如下: 现你需要提高查询速度和简化多余数据,你应该怎么处理?(各个正确答复提出一部分的解答。所以选择2个选项) A. 创建新的
28、定购表OrderDetail表。 表中添加OrderID, ProductID, 和Quantity列。B. 将OrderID和ProductID组成Orders表新的主键。 C. 删除Orders表ProductID和Quantity列。D. 在Orders 表格中创建唯一约束OrderID列。E. 将Products 表中UnitPrice 列移到Orders 表内。 Answer: A, C. 解释: 从一个逻辑的数据库设计出发,我们可以看到Orders 和Products 表的关系存在问题。我们希望两表有如下的关系: l 每份定购将包括一个和多个产品。 l 每个产品可以对应0,1或者多
29、个序号简言之,我们在Orders和Products 表中要建立多对多的关系,但是SQL服务器不允许多对多的关系,所以我们必须建立联系Orders和Products表的新表,通过两个一对多的关系实现多对多关系。我们可以这么做: l 建新表OrderDetail; l 在OrderDetail 表中添加OrderID, ProductID, 和Quantity列。l 在Orders表中移除Quantity 和ProductID列。l 在OrderDetail表中创建外键OrderID 列,对应Orders表中的OrderID列。l 在OrderDetail表中创建外键ProductID列,对应Pr
30、oducts表中的ProductID列。现在,可以更加规范数据库。而且提高了查询时间去掉多余数据。 另外一种想法是:在本事务中OrderID, ProductID 和Quantity列是必须优先考虑的,因此创建一个新表是有益的。并且,可以把Quantity列从Order表中移除,以减少数据冗余。错误答案解析:B: 创建一个不涉及OrderID 和ProductID 列的主键并不好。作为一个合理的数据库设计ProductID 列并不能完全约束Orders 表内的non-key 列,也不应是主键的一部分。相反地,Orders 表将被一分为二。 D: 在Orders 表内的OrderID 列创建UN
31、IQUE约束,确保OrderID列的值是唯一的同时也阻止出现值为空。但是并不解决Orders和Products表的关系问题。 E: 将Product表内的UnitPrice列移到Orders表内并不能解决问题。UnitPrice列记录产品的价格是属于Products表,不能移到Orders表内。唯一的方法是建立新表,以描述Products和Orders表的关系。 Q.9你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情时建立了如下的存储过程:另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“No Sales Found”,
32、怎样建立这个脚本?答案:D.解释:这个用于记录特定书名的每天销售情况的存储程序是个返回程序。我们必须保存执行该程序时的返回代码以便该返回代码能够在存储程序之外使用。在这个例子里,retval是返回代码且在第一行中被声明,该存储程序是一本书名中的get sales for title和net etiquette。一个返回程序的正确语法如下:DECLARE return code EXEC return code = stored procedure OUTPUT 这个例子中有一个额外的ytd 或是每天的变量参数,那是被声明在第二行,在本例子中其正确语法如下:DECLARE retval int
33、DECLARE ytd EXEC retval = get_sales_for_title get Etiquette ytd OUTPUT错误答案解析: A: 第3行执行保存产品代码时,没有首先保存返回代码。 B: 第3行执行保存产品代码时,没有首先保存返回代码。 C: 同上。 Q.10你是一个集装箱制造公司的数据库开发人员,公司制造的集装箱有不同的尺寸和形状,存储的集装箱信息的表有 Size、Container、Shope,如图所示。数据存储在表中的例子如下图所示。一般来说,集装箱的尺寸周期性的改变,数据库的用户需要知道集装箱的容量,容量是基于Shape、size表中的数据计算得到的。你要
34、隐藏计算的细节,使用一个SELECT查询可以方便的得到,你将怎么做?A建立一个用户定义的函数,使用ContainerID作为参数,返回集装箱的容量。B建立一个程序,使用ContainerID作为参数,返回集装箱的容量。C在Container表中加人名为volume的一列,当一个新集装箱加入表中时,建立一个触发器计算和存储这列的值。D在Contain表中加入一个计算过的列计算集装箱的容量。答案:A 解释:被统计的列可以直接放置到查询声明中。我们这里想要掩藏演算的细节, 虽然我们掩藏演算通过定义一个用户定义的计算函数。注意1:用户定义函数是SQL Server 2000.的一大新特性该函数是一个有
35、一个或多个Transact-SQL声明的子程序,它可以用于压缩代码以重新使用。CREATE FUNCTION语句来建立用户定义函数。ALTER FUNCTION来实现修改,the DROP FUNCTION用于实现删除。SQL Server 2000支持两种类型的用户定义函数:标量函数。该函数在被定 义的返回语句中返回类型中返回一个单独的数值。而表数值函数,其返回一个表。还有两种类型的表数值函数:内嵌小应用程序以及多重语句的程序。注意2: 可计算的列可计算的列是一种虚拟的列,它的计算是应用同一表列的其他列的表达式,它并没有存储在表内。这个表达式可是是非计算的列名,常数,函数,变量,以及这些一个
36、或多个操作数连接起来的组合但是不呢感是一个子查询。可计算列可以用在查询列表中。查询列表是用语句排序的,常规的表达式也可以应用在其他的地方。然而,一个可计算列不能用于缺省或者定义为外键或者非空定义限制,但是如果该可计算列值被确定的表达式定义且结果的数据类型在索引列是被允许的情况下,它在索引中可以做为键列,或着是主键的一部分,或是唯一限制。不正确的答案解析:B存储程序的返回值不能用于查询的SELECT列表内。注意:存储程序能够返回数据作为输出参数,该参数可以返回一个数据或者是指针变量。代码经常是整型的数值,而每个SELECT语句的结果集包括在存储程序中或者是被该存储程序调用的其他存储程序内。且全局
37、指针变量能被外部的存储程序参照。存储程序协助达到逻辑的一致的实施横跨应用。能够设计执行一些普通的计划任务SQL语句能在存储程序中被设计,编码,测试一次。各种应用需要执行, 然后任务可能简单地执行存储程序。 编制程序企业逻辑入一个唯一的存储程序并且提供一个单独的控制观点以保证商业惯例正确地实施。存储程序同样能实现改善性能。许多的任务被执行为一系列的SQL语句。条件逻辑被应用到第一个SQL语句的结果决定哪一个后续的SQL语句被执行。如果这些SQL语句以及条件逻辑别写到一个存储程序内,他们将成为服务器上单一执行计划的一部分。结果并不需要返回给客户机来应用条件逻辑。所有的工作都是由服务器来完成的。C只
38、是利用插入触发器并没有什么效果,如果容器的体积改变值会被更新触发器也将被更新。注意:触发器是一系列的存储程序,当UPDATE, INSERT, or DELETE语句操作表或视图时触发器自动执行。当数据被修改时触发也可用于自动执行企业条例以及被执行来拓展限制、缺省以及规则的整型测试逻辑。每当他们提供应用的必需的功能限制和缺省应该被使用 。触发器只有当UPDATE, INSERT or DELETE是针对表或视图操作时能够用于运行计算和返回结果。触发器所返回的结果是有任何触发器内的查询语句来产生的。包括触发器内的SELECT语句而不是那些只含参数的语句,这些只含参数的语句并不被推荐因为用户并不希
39、望在操作UPDATE, INSERT, or DELETE时任何数据返回。DSQL Server表包含可计算的列。这些可计算的列只能运用同一表中的常数、函数以及其他列。一个可计算的列并不能运用其他表中的任何列。我们不能利用一个可计算的列来存储容器的体积。Q.11如果你是一位为医院做数据库的开发商。医院每层有四个供应房间,并且医院有26层。你正在为存货设备设计一个目录管理数据库,某些可用项必须一直保存着。当一个项目被用时,通过扫描条形码来减少数据库中的目录数目。当库房的数量一旦少于项目的最少数量时,供应管理员应该马上标明数码。你该怎么做呢? 创建一个可以被调用更新表格目录的存储程序。如果合起来的
40、数量少于库存量,用xp_logevent系统存储程序来标注供应商。. 在表格目录中创建一个替换更新触发器。如果在插入表格中的数量少于库存量,用SQLAgent 来发一封电子邮件给供应商的pager。C.在表格目录中创建一个代替更新跟踪器。如果在插入表格中的数量少于库存量,用xp_sendmail系统存储程序来给供应商编页。. 预定SQL 服务器工作跑在四小时间隔时间. 工作使用notify_level_page = 2 论据。配置工作以便它测试各个项目数量反对重新进货的数量。配置工作以便它退回假的价值如果项目要求重新进货。这将触发供应商的调页。答案: C.Q.12你是一个公司的关于工作时间报告
41、的数据库开发人员,一般平均有5个用户同时存取这个数据库,并且查询时间要小于1秒。然而,在周五下午或周一早上,大部分雇员输入他们的考勤数据时,数据库可能会有同时50个用户使用,这时,查询返回时间平均是15到20秒。你需要发现查询变慢的原因并解决这个问题,你将怎么做?A使用sp_lock和sp_who系统存储过程发现锁定的资源,并确定占用锁的进程,使用这个信息确定和重新设计导致资源锁定的事务处理。B查询 sysprocesses和 Sysobjects系统表,发现死锁的资源,并确定占有这些资源的进程,对死锁的资源设定一个更短的进程占有时间限制。C查询Sysprocesses系统表,发现那些资源被存
42、取,在所有这些被存取的表的主关键字加上一个簇索引。D使用Sp_monitor系统存储过程发现哪个进程导致查询反映时间增加,对这些进程设置更小的限制事务隔离级别。答案:AQ.13你是一个保险公司的数据库开发人员,这家保险公司有一个用于保单或保单所有者的多层的应用。保单所有者信息存储在一个名为Owners的表中,下面的语句用于建立这个表,当保单所有者的信息输入时,若不包括所有者的出生年月,数据库要产生一个错误信息。你要设计一个方法来校验出生日期数据是否填写,没有的情况下要显示错误信息。你将怎么做?A在BirthDate字段上加上CHECK约束。B建立一个规则,并将这个规则绑定在BirthDate字
43、段上。C改变Owners表使BirthDate字段不能为空。D在Owners表上建立一个触发器校验BirthDate字段。答案:DQ.14如果你是一个大型啤酒厂的数据库开发商。关于每个啤酒分厂和在每个分厂的设备定位被存储在命名为设备中的数据库中的信息。这些分厂信息是存储在一个名为定位的表格中,而设备信息存储在名为Parts的表格里。这些源码用来创建一些表格在定位和部分原稿展品中用来展示。CREATE TABLE Location ( LocationID int NOT NULL,LocationName char (30) NOT NULL UNIQUE,CONSTRAINT PK_Loca
44、tion 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) 啤酒厂正处于关闭几家现有的工厂和开设几家新工厂过程中。当分厂关闭后,关于分厂的信息和所有设
45、备在那个分厂必须从数据库被删除,你已经为进行这个操作创建了一个存储程序。存储程序代码如下:。CREATE PROCEDURE sp_DeleteLocation LocName char(30) AS BEGIN DECLARE PartID int DECLARE crs_Parts CURSOR FORSELECT p.PartIDFROM Parts AS p INNER JOIN Location AS 1 ON p.LocationID = LocNameWHERE l.LocationName = LocName OPEN crs_PartsFETCH NEXT FROM crs_
46、Parts INTO PartID WHILE (FETCH_STATUS -1) BEGINDELETE Parts WHERE CURRENT OF crs_Parts FETCH NEXT FROM crs_Parts INTO PartID ENDCLOSE crs_Parts DEALLOCATE crs_Parts DELETE Location WHERE LocationName = LocName END 这个程序的执行花了比预期长的时间,你需要减少这个程序的执行时间。你该怎么做?A增加重新编译选项到程序定义中去。B用游标操作取代单个删除状态。C增加BEGIN TRAN语句到程序的开头,或者在程序的结尾增加一个COMMIT TRAN语句。D. 设置交易隔离级设定为READ UNCOMMITTED。E.增加非聚簇集的索引在部分表格的部分ID列。答案: B. Q.15你是一个保险公司的数据库开发人员,公司的保单信息存储在SQL Server 2000数据库中,你使用以下脚本建立了一个名为Policy的表:每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做?A建立一个 INSTEAD OF INSERT触发器来产生一个新的保单号,并将这个保单号插入