版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL Server2000 数据库程序设计题库1 你是一个数据公司的数据库开发人员,你建立了一个用来存储了 15 个不同的高中体育成绩的统计数据库, 50 个体育信息公司将 把这些信息发布在各自的 Web站点上,每个公司站点的数据排列和使用这些统计数据的格式是不同的。你要将数据打包传送给公司,你将怎么做?a.使用包含 FOR XML选项的 SELECT语句提取数据。b.对 SELECT语句返回的数据使用 sp_makewebtask系统存储过程来生成 HTML数据。c.C. 对数据库输出的数据建立数据转换服务包,形成使用TAB界定符的文本文件。d.建立一个使用 SEL_DMO的应用程序来提取
2、数据库中的数据,并将这些数据转换到标准 EDI( electronic data interchange)文件。答案: A.解释 : 这些数据将会在公司的网站发布。 XML是可扩展标示语言,包含结构信息的文档。 可扩展标示语言适合制作WEB文件。SQL 查询结果可以是 XML文档。直接执行查询或存储过程也可以生成XML文档。使用带 FORXML的子句的 SELECT语句可以直接生成 XML文档。在 FORXML子句中 XML 的模式可以通过参数 T RAW, AUTO, 或 EXPLICIT 来指定 .不正确的答案 :B: sp_makeweb 储存程序用来生成 HTML 格式文档而不是的标准
3、记录集。 XML 是比 HTML更复杂的格式的文档,在这种情形中 XML更合适。C: 一个用制表符分隔的文件,可以在任何支持用制表符分隔的文件的电子表格(如 Microsoft Excel )中进行分析。然而 , 这个格式对网页是不适当的。D: SQL- DMO 不能生成在网站分布的数据。注意 : SQL- DMOSQL 分布式管理对象 (SQL-DMO) 封装 Microsoft? SQLServer? 2000 数据库中的对象。 SQL-DMO允许用支持自动化或 COM 的语言编写应用程序,以管理 SQL Server 安装的所有部分。 SQL-DMO是 SQL Server 2000 中
4、的 SQLServer 企业管理器所使用的应用程序接口 (API) ;因此使用 SQL-DMO的应用程序可以执行 SQL Server 企业管理器执行的所有功能。SQL-DMO用于必须包含 SQL Server 管理的任何自动化或 COM 应用程序,例如:封装 SQL Server 作为自己的数据存储并想尽量减少用户的 SQL Server 管理任务的应用程序。在程序本身并入了专门的管理逻辑的应用程序。想在自己的用户界面中集成SQL Server管理任务的应用程2 你是一个邮购公司的数据库开发人员,公司有两台使用SQL Server2000 的计算机,分别为 CORP1和 CORP2。CORP
5、1是一台联机事务处理服务器, CORP2存储销售历史数据。 CORP2作为一台连接服务器已连接到 CORP1上。销售部经理要求你建立一个购买软盘的客户的列表, 这个列表将每个月产生一次邮购的奖品, 软盘在数据库中的类别 ID 为 21。你必须从 SalesHistory 表中刷新这个信息,这个文件存储在 CORP2的一个数据库上,你要从 CORP1上执行这个查询,你将使用哪条脚本语句查询?AEXEC sp_addlinkedserverCORP2,SQL Server GOB. SELECT CustomerID FROM OPENROWSETSQLOLEDB(, CORP2;p*word,S
6、ELECTWHERECategoryID =21)C. SELECTCustomerIDFROMWHERECategoryID = 21D. EXEC sp_addserver CORP2GO答案: C.解释 : 对于这种情况,只要一个简单的带 WHERE子句 SELECTFROM语句即可,一般格式:SELECT CustomerID FROM SalesHistoryWHERE CategoryID = 21但是 SalesHistory 表在另一台服务器上, 并且已经建立了另一台服务器的连接,可以直接执行分布查询,必须使用对象的四部分名称:服务器、数据库、所有者和表名,即。注 : sp_l
7、inkedserver使用 sp_linkedserver建立服务器连接 ,语法为 :sp_addlinkedserver server = 'server' , srvproduct = 'product_name' , provider = 'provider_name' , datasrc = 'data_source' , location = 'location' , provstr = 'provider_string' , catalog = 'catalog' 不正确
8、答案 :A: 已建立服务器连接,不要再建立服务器连接B: 对于已建立连接的服务器, 一般不用 OPENROWSET访问。当访问链接服务器中的表时, OPENROWSET访问方法是一种替代方法,并且是一种使用OLE DB 连接并访问远程数据的一次性的、特殊的方法。D: sp_addserver是一个非法存储过程名3 你是 Trey Research 公司的一个数据库开发者。你设计了两个事务用来输入职员的相关数据到公司的数据库中。 一个事务插入职员名字和地址到数据库中,这个事务很重要。 另一个事务插入职员人口统计的其他数据项,这个事务不很重要。在访问高峰时, 数据库管理人通知你数据库伺候器有时候会
9、出现错误。 每当发生错误时 , 数据库伺候器随机地结束一个事务。你一定保证当数据库伺候器结束一个事务时 , 它从不结束比较重要的事务。 你应该做什么 ?A重要事务的 DEADLOCK_PRIORITY级别设置低B不重要事务的 DEADLOCK_PRIORITY级别设置低C增加一段条件代码,检查重要事务的服务器返回的错误代号是否为1205,若是重新启动该事务D在事务的 SQL操作语句中增加ROWLOCK优化提示E把重要事务的事务隔离级别设置为SERIALIZABLE答案: B解释 : 现在是一个死锁的问题,并且随机终止一个事务。现在有两类事务:重要事务和不重要事务问题要求当死锁的问题发生时,要终
10、止不重要事务而重要事务一定不要终止。通过把不重要事务的 DEADLOCK_PRIORITY级别设置低,当在两个事务间发生死锁时,不重要事务首先成为牺牲品,而重要事务没有被终止。死锁 :当某组资源的两个或多个线程之间有循环相关性时,将发生死锁。死锁是一种可能发生在任何多线程系统中的状态, 而不仅仅发生在关系数据库管理系统中。多线程系统中的一个线程可能获取一个或多个资源(如锁)。如果正获取的资源当前为另一线程所拥有, 则第一个线程可能必须等待拥有线程释放目标资源。这时就说等待线程在那个特定资源上与拥有线程有相关性。如果拥有线程需要获取另外一个资源,而该资源当前为等待线程所拥有,则这种情形将成为死锁
11、: 在事务提交或回滚之前两个线程都不能释放资源, 而且它们因为正等待对方拥有的资源而不能提交或回滚事务。 例如,运行事务 1 的线程 T1具有 Supplier 表上的排它锁。运行事务 2 的线程 T2 具有 Part 表上的排它锁,并且之后需要 Supplier 表上的锁。事务 2 无法获得这一锁,因为事务 1 已拥有它。事务 2 被阻塞,等待事务 1 。然后,事务 1 需要 Part 表的锁,但无法获得锁,因为事务 2 将它锁定了。事务在提交或回滚之前不能释放持有的锁。因为事务需要对方控制的锁才能继续操作,所以它们不能提交或回滚。说明 死锁经常与正常阻塞混淆。当一个事务锁定了另一个事务需要
12、的资源,第二个事务等待锁被释放。默认情况下, SQL Server 事务不会超时(除非设置了 LOCK_TIMEOUT)。第二个事务被阻塞,而不是被死锁。在该插图中,对于 Part 表锁资源,线程 T1 在线程 T2 上具有相关性。同样,对于 Supplier 表锁资源,线程 T2 在线程 T1 上具有相关性。因为这些相关性形成了一个循环,所以在线程 T1 和线程 T2 之间存在死锁。不正确答案 :A: 如果一个事务的优先级设置为低,当死锁发生时,它首先成为牺牲品;因为重要事务要保留,所以该事务的级别不能设置为低C: 当一个事务的成为死锁的牺牲品时, 服务器返回一个 1205 的错误代号;当重
13、要事务杀死后, 重启该事务, 这样保证了该事务不会被终止, 缺点是这个方法不是最有效的,并且会影响性能,最好为选择 BD: ROWLOCK优化提示使用行级锁,而不使用粒度更粗的页级锁和表级锁E: 事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。 较低的隔离级别可以增加并发, 但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性, 但可能对并发产生负面影响。应用程序要求的隔离级别确定了SQL Server使用的锁定行为。注 : 隔离级别当锁定用作并发控制机制时, 它可以解决并发问题。 这使所有事务得以在彼此完全隔离的环境中运行,但是任何时候
14、都可以有多个正在运行的事务。可串行性是通过运行一组并发事务达到的数据库状态, 等同于这组事务按某种顺序连续执行时所达到的数据库状态。SQL-92 隔离级别尽管可串行性对于事务确保数据库中的数据在所有时间内的正确性相当重要, 然而许多事务并不总是要求完全的隔离。 例如,多个作者工作于同一本书的不同章节。新章节可以在任意时候提交到项目中。但是,对于已经编辑过的章节,没有编辑人员的批准, 作者不能对此章节进行任何更改。 这样,尽管有未编辑的新章节,但编辑人员仍可以确保在任意时间该书籍项目的正确性。 编辑人员可以查看以前编辑的章节以及最近提交的章节。事务准备接受不一致数据的级别称为隔离级别。 隔离级别
15、是一个事务必须与其它事务进行隔离的程度。 较低的隔离级别可以增加并发, 但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性, 但可能对并发产生负面影响。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。SQL-92 定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别:未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。提交读( SQL Server 默认级别)。可重复读。可串行读(事务隔离的最高级别,事务之间完全隔离)。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。下面四种隔离级别允许不同类型的行为。隔离级别
16、脏读不可重复读取幻像未提交读是是是提交读否是是可重复读否否是可串行读否否否事务必须运行于可重复读或更高的隔离级别以防止丢失更新。 当两个事务检索相同的行,然后基于原检索的值对行进行更新时, 会发生丢失更新。 如果两个事务使用一个 UPDATE语句更新行,并且不基于以前检索的值进行更新, 则在默认的提交读隔离级别不会发生丢失更新。4 你是公司的 SQL Server 2000 联机事务处理数据库的数据库开发人员。许多表有一百万或更多的行, 所有的表都建立了一个聚集索引, 经常存取的表另外还至少有一个非聚集索引, 数据库服务器上有两个 RAID阵列存储数据文件, 你想设置表和索引以取得最佳的 I/
17、O 性能。你在每个 RAID阵列上建立了一个文件组,下一步你将作什么 ? a设置频繁的互相连接的表加入同一个文件组,设置经常存取的表和所有的属于这些表的索引到另一个文件组。b设置频繁的互相连接的表加入同一个文件组,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件组。c设置频繁的互相连接的表加入不同的文件组,设置经常存取的表和所有的属于这些表的非簇索引到不同的文件组。d设置频繁的互相连接的表加入不同的文件组群,设置经常存取的表和所有的属于这些表的非簇索引到同一个文件组。答案: C.解释 : 把频繁访问的表和它的索引存放在不同磁盘阵列的文件组, 可以提高数据库的性能。因为这样 可以使不同的
18、线程来访问表和非聚集索引。 表和聚集索引不能分开存放到不同的文件组。 把经常连接的表分开存储到不同磁盘阵列也能提高数据库的性能。 另外,创建和磁盘阵列数一样多的文件个数, 使得每个阵列上有一个文件,这样也能提高性能。日志文件和数据文件分开存放到不同的磁盘阵列上也能提高性能。不正确答案:A: 经常连接表存放到同一个文件组不能提高性能。 因为这样不能并行处理。 另外只有非聚集索引才能和表分别存储到不同文件组。B: 经常连接表存放到同一个文件组不能提高性能。因为这样不能并行处理D: 把表和非聚集索引存放到同一个文件组不能提高性能。因为这样不能并行处理5 你是公司的 SQL Server2000 数据
19、库开发人员,你修改了数据库中用来建立销售部月报表的几个存储过程, 存储过程中包含了从三个或更多表中提取数据的复杂查询,所有这些表都至少有一个索引。 用户报告说这些月报表 比以前的版本的明显要慢, 你要改进这些报表的性能,将怎么做?a. 对创建每个存储过程的 DDL的脚本,使用这个脚本作为工作负载进行索引优化。b. 在 SQL Profiler中捕捉每个存储过程的执行信息,使用这个信息文件作为工作负载进行索引优化。c. 修改存储过程中引用表的索引统计信息。d. 在 SQL查询分析器中执行每个存储过程,使用e. 在 SQL查询分析器中执行每个存储过程,使用Show Execution Plan选项
20、。Show Server Trace选项。答案: E.解释 :通过查看服务器跟踪来分析和优化存储过程。 使用 " 显示服务器跟踪 " 选项,可以显示查询对服务器到底有何影响,通过这些信息,来分析和优化存储过程。 Note: 查询窗口跟踪窗格" 显示服务器跟踪 " 命令提供了对信息的访问, 此信息用于确定查询对服务器方的影响。如果 " 显示服务器跟踪 " 命令在执行查询时启用, 则该命令显示跟踪窗格, 此窗格提供有关事件类、子类、整型数据、文本数据、数据库ID 、持续时间、启动时间、读、写以及CPU 使用的信息。索引优化向导索引优化向导
21、使您得以为Microsoft?SQL Server? 2000 数据库选择和创建优化的索引集和统计信息集,而不需要深入了解SQL Server的数据库结构、工作负荷或内部原理。为了生成适用的优化索引集建议, 该向导需要工作负荷。 工作负荷包含一个保存在文件或表中的 SQL 脚本或 SQL 事件探查器跟踪,其中有 SQL 批处理或远程过程调用 (RPC) 事件类以及 Event Class 和 Text 数据列。Incorrect answers:A: 索引优化向导使用工作负载作为输入,存储过程的脚本不能作为其输入SQL 语言主要有两种:一种是数据定义语言(DDL) ,用于定义和管理SQL 数据
22、库中的所有对象;另一种是数据操作语言 (DML) ,用于选择、插入、更新和删除使用 DDL 定义的对象中的数据。 Transact-SQL DDL 用于管理数据库、表和视图等对象,每个对象类通常都包含 CREATE、 ALTER和 DROP 语句,如 CREATE TABLE、ALTER TABLE和 DROP TABLE。DDL不能索引优化向导的输入B:索引优化可以提高存储过程的的性能,但是没有数据发生变化并且查询很复杂。最好还是通过查看服务器跟踪来发现问题。C: 选择合适的索引和工作负载是很复杂、 耗时,对于中度复杂的数据库和负载也有可能出错。若想优化索引,最好使用索引优化向导。D: 执行
23、计划能够提供一些线索, 说明存储过程是怎样执行的。 一个执行计划只是说明对一个特殊的查询查询优化器是怎样优化的。 这些信息是有用的, 它能用来优化查询的性能。然而执行计划不是分析复杂查询的最好方法。6 你是一个国际进口商的数据库开发人员,你正在创建数据库,用来存储订购信息的,通过 C/S 模式的应用程序输入订购数据, 每当输入一个新的定单, 要分配唯一的一个定单号, 定单号必须以递增的方式签发, 平均每天有 10000 定单要输入。你创建了一个 Orders 表,包含 OrderNumber 列,接下来你应怎么做?A.把该列的数据类型设为 . uniqueidentifierB.把该列的数据类
24、型设为INT ,并设置具有 IDENTITY属性C. 把该列的数据类型设为 INT ,并创建一个用户函数,该函数返回表中的最大定单号D.把该列的数据类型设为INT ,创建 NextKey 表,包含 NextOrder(INT)列,再创建一个存储过程取出和更新NextKey 表中的数据。答案: B.解释 :对任何表都可创建包含系统所生成序号值的一个标识符列, 该序号值唯一标识表中的一行。例如,当在表中插入行时, 标识符列可自动为应用程序产生唯一的客户收据号码。标识符列在其所定义的表中包含的数值通常是唯一的。这意味着在包含标识符列的其它表中可使用与之相同的数值进行标识。一个表只能有一列定义为IDE
25、NTITY 属性,而且该列必须以decimal 、int 、numeric 、smallint 、 bigint 或 tinyint数据类型定义。可指定种子和增量值。二者的默认值均为1 。标识符列不允许空值,也不能包含 DEFAULT定义或对象。在设置 DENTITY 属性后,可以使用 IDENTITYCOL 关键字在选择表中引用该列。不正确答案 :A: MS SQL Server 2000在复制表时使用 uniqueidentifier数据类型, 来保证列值的全球唯一性。使用 uniqueidentifier数据uniqueidentifier数据类型存储 16字节的二进制值,该值的使用与全
26、局唯一标识符 (GUID) 一样。 GUID 是一个唯一的二进制数字;世界上的任何两台计算机都不会生成重复的 GUID 值。 GUID 主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。uniqueidentifier列的 GUID 值通常由以下方式获得:在 Transact-SQL 语句、批处理或脚本中调用 NEWID函数。在应用程序代码中,调用返回 GUID 值的应用程序 API 函数或方法。Transact-SQL NEWID 函数以及应用程序API函数和方法从它们网卡上的标识数字以及 CPU 时钟的唯一数字生成新的uniqueidentifier值。每个网卡都有唯
27、一的标识号。 由 NEWID返回的 uniqueidentifier使用服务器上的网卡生成。由应用程序API函数和方法返回的uniqueidentifier使用客户机上的网卡生成。一般不将 uniqueidentifier定义为常量,因为很难保证实际创建的uniqueidentifier具有唯一性。指定uniqueidentifier常量的方法有两种:字符串格式'6F9619FF-8B86-D011-B42D-00C04FC964FF'二进制格式0xff19966f868b11d0b42d00c04fc964ff可以使用 NEWID()函数作为该字段的默认值C: 函数是由一个或
28、多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。 Microsoft? SQL Server? 2000 并不将用户限制在定义为Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。可使用 CREATE FUNCTION语句创建、使用 ALTER FUNCTION语句修改、以及使用 DROP FUNCTION语句除去用户定义函数。每个完全合法的用户定义函数名( database_name. owner_name. function_name ) 必须唯一。必须被授予 CREATE FUNCTION权限才能创建、修改或除去用户定义函数
29、。不是所有者的用户在 Transact-SQL 语句中使用某个函数之前, 必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK约束、 DEFAULT子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES权限。在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的 Transact-SQL 错误。在函数中,上述错误会导致停止执行函数。 接下来该操作导致停止唤醒调用该函数的语句。用户定义函数的类型SQL Server 2000支持三种用户定义函数:标量函数内嵌表值函数多语句表值函数D: 创建另外一个表用来跟踪定单号,在这个例子中是不合适
30、的。7 你是一个技术培训中心的数据库开发人员,现在,行政人员在纸上记录有学生、教师、课程和教室的安排数据, 培训中心想废除纸张管理而改用数据库来管理这些数据,你设计了下列表,你想提高查询反映时间和冗余数据降到最小 ,应怎么办?A.创建 Instructors表,包含 InstructorID、InstructorName和OfficePhone 列 。在 Courses 表中增加 InstructorID列B.把 Classroom 表中的所有列移到 Courses 表中,删除 Classroom表C.把 Courses 表中主键约束删除, 而用 CourseID 和 CourseTitle组
31、合主键代替D.删除 ClassroomID 列,而建立 ClassroomNumber 和 ClassTime 主键约束。答案: A.解释标准化数据库是非常有效的,现在这个数据库的设计是非标准化的,Courses 表中包含教师的数据, 当一个教师有多余一门课时,就会有重复数据,InstructorName和 OfficePhone要为每门课程登记。 这个数据库的标准化设计应该是:创建一个新的表Instructors该表中包含 InstructorID,作为候选主键在 Instructors表中增加 InstructorName和 OfficePhone删除 Courses 表中 Instruc
32、torName和 OfficePhone列,在 Courses 表中增加 InstructorID列,作为外键,连接表Instructors中的InstructorID不正确答案 :B: 把 Classroom 表中的所有列移到 Courses 表中,只能使问题更糟糕,学生每选择一门课,学生的数据就要输入一次,数据库将更不规范化。C: 把 Courses 表中的主键改为CourseID 和 CourseTitle的组合主键,数据库将更不规范化。这样将不能有两门课有相同的CourseTitle,从而每年(学期)就要为课程起不同的名字。D: 改变 Classroom 的主键数据库并不能得以改善,相
33、反,ClassroomID 将是冗余,此方法并没有解决Courses 表中 InstructorName和 OfficePhone这两列的问题。8 你将设计一个数据库包括用户定购。 用户将在每次的定购大量的产品时设置一个序号, 可以在一个订单中定购各种不同的产品。 具体建库如下:现你需要 提高查询速度和简化多余数据, 你应该怎么处理? (各个正确答复提出一部分的解答。所以选择 2 个选项)A. 创建新的定购表 OrderDetail 表。表中添加 OrderID , ProductID ,和Quantity列。B. 将 OrderID 和 ProductID 组成 Orders 表新的主键。仍
34、然有冗余且不佳C. 删除 Orders 表中 ProductID 和 Quantity 列。D. 在 Orders 表格中创建唯一约束 OrderID 列。E. 将 Products 表中 UnitPrice 列移到 Orders 表内。Answer: A , C.解释:从一个逻辑的数据库设计出发,我们可以看到Orders 和 Products表的关系存在问题。我们希望两表有如下的关系:每份定购将包括一个和多个产品。每个产品可以对应0,1 或者多个序号简言之, 我们在 Orders 和 Products表中要建立多对多的关系,但是SQL服务器不允许多对多的关系,所以我们必须建立联系Orders
35、 和 Products 表的新表,通过两个一对多的关系实现多对多关系。我们可以这么做:建新表 OrderDetail;在 OrderDetail表中添加 OrderID ,ProductID ,和 Quantity列。在 Orders 表中移除 Quantity 和 ProductID 列。在 OrderDetail 表中创建外键 OrderID 列,对应 Orders 表中的 OrderID 列。在 OrderDetail 表中创建外键 ProductID 列,对应 Products表中的 ProductID 列。现在,可以更加规范数据库。而且提高了查询时间去掉多余数据。另外一种想法是:在本
36、事务中OrderID , ProductID和 Quantity列是必须优先考虑的,因此创建一个新表是有益的。并且,可以把Quantity列从 Order 表中移除,以减少数据冗余。错误答案解析:B: 创建一个不涉及 OrderID 和 ProductID 列的主键并不好。作为一个合理的数据库设计 ProductID 列并不能完全约束 Orders 表内的 non-key 列,也不应是主键的一部分。相反地, Orders 表将被一分为二。D: 在 Orders 表内的 OrderID 列创建 UNIQUE约束,确保 OrderID 列的值是唯一的同时也阻止出现值为空。 但是并不解决 Order
37、s 和 Products 表的关系问题。E: 将 Product 表内的 UnitPrice 列移到 Orders 表内并不能解决问题。UnitPrice列记录产品的价格是属于Products 表,不能移到 Orders 表内。唯一的方法是建立新表,以描述Products 和 Orders 表的关系。9 你是一个出版公司的数据库开发人员,要查看特定的书名的每天的销售情况,建立了如下的存储过程:CREATE PROCEDURE get_sales_for_titletitle varchar(80), ytd_sales int OUTPUT ASSELECT ytd_sales = ytd_s
38、alesFROM titlesWHERE title = titleIF ROWCOUNT = 0RETURN (-1)ELSERETURN(0)另外建立了一个脚本执行这个存储过程, 如果执行成功, 将返回对应于该书的每天的销售情况的报表,如果执行失败,将返回“ No Sales Found”,怎样建立这个脚本?a. DECLARE retval int DECLARE ytd intEXEC get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GONet Etiquette +
39、 STR (ytd), ytdb. DECLARE retval int DECLARE ytd intEXECget_sales_for_titleNet Etiquette, ytd OUTPUTIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GO+ STR (ytd)c. DECLARE retval int DECLARE ytd intEXEC get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sa
40、les:GONet Etiquette,retval OUTPUT + STR (ytd)d. DECLARE retval int DECLARE ytd intEXEC retval = get_sales_for_titleIF retval < 0PRINT No sales foundELSEPRINT Year to date sales:GONet Etiquette + STR (ytd ), ytd OUTPUT答案: D.解释 : 这个存储过程将返回对应于书名的每天的销售情况的报表,是一个RETURN存储过程,我们必须在存储过程执行后,保存其返回值,在存储过程外部是可
41、以使用的。该例中,在在存储过程get_sales_for_title的第一行声明的变量 retval是保存返回值的,存储过程正确语法是:DECLARE返回值EXEC返回值 =存储过程名称Net Etiquette OUTPUT是书的标题,RETURN在该例中,正确的语法是:DECLARE retval intDECLARE ytdEXEC retval = get_sales_for_titleNet Etiquette, ytdOUTPUT不正确答案:A: 脚本的第 3 行,执行存储过程没有输出返回值B: 脚本的第 3 行,执行存储过程没有输出返回值C: 脚本的第 3 行,执行存储过程没有输
42、出返回值10你是一个集装箱制造公司的数据库开发人员, 公司制造的集装箱有不同的尺寸和形状,存储的集装箱 信息的表有 Size 、 Container 、 Shape,如图所示。数据存储在表中的例子如下图所示。一般来说,集装箱的尺寸周期性的改变, 数据库的用户需要知道集装箱的容量,容量是基于 Shape、size 表中的数据计算得到的。 你要隐藏计算的细节,使用一个 SELECT查询可以方便的得到, 你将怎么做?A. 建立一个用户定义的函数,使用 ContainerID 作为参数,返回集装箱的容量。B. 建立一个存储过程,使用 ContainerID 作为参数,返回集装箱的容量。C. 在 Con
43、tainer 表中加入名为 volume 的一列,当一个新集装箱加入表中时,建立一个触发器计算和存储这列的值。D. 在 Container 表中加入一个计算过的列计算集装箱的容量。正确答案: A解释:被统计的列可以直接放置到查询声明中。我们这里想要掩藏演算的细节,显然我们掩藏演算通过定义一个用户定义的计算函数。注意 1:用户定义函数是SQL Server 2000. 的一大新特性该函数是一个有一个或多个 Transact-SQL 声明的子程序,它可以用于压缩代码以重新使用。 CREATEFUNCTION语句来建立用户定义函数。 ALTERFUNCTION来实现修改, the DROP FUNC
44、TION用于实现删除。 SQL Server 2000 支持两种类型的用户定义函数:标量函数。该函数在被定 义的返回语句中返回类型中返回一个单独的数值。而表数值函数,其返回一个表。还有两种类型的表数值函数:内嵌小应用程序以及多重语句的程序。注意 2: 可计算的列可计算的列是一种虚拟的列, 它的计算是应用同一表列的其他列的表达式, 它并没有存储在表内。这个表达式可是是非计算的列名,常数,函数,变量,以及这些一个或多个操作数连接起来的组合但 是不可能是一个子查询。 可计算列可以用在查询列表中。 查询列表是用语句排序的, 常规的表达式也可以应用在其他的地方。然而,一个可计算列不能用于缺省或者定义为外
45、键或者非空定义限制, 但是如果该可计算列值被确定的表达式定义且结果的数据类型在索引列是被允许的情况下,它在索引中可以做为键列,或着是主键的一部分,或是唯一限制。不正确的答案解析:B存储程序的返回值不能用于查询的 SELECT列表内。注意:存储程序能够返回数据作为输出参数, 该参数可以返回一个数据或者是指针变量。 代码经常是整型的数值,而每个 SELECT语句的结果集包括在存储程序中或者是被该存储程序调用的其他存储程序内。 且全局指针变量能被外部的存储程序参照。 存储程序协助达到逻辑的一致的实施横跨应用。 能够设计执行一些普通的计划任务 SQL语句能在存储程序中被设计,编码,测试一次。各种应用需
46、要执行,然后任务可能简单地执行存储程序。编制程序企业逻辑入一个唯一的存储程序并且提供一个单独的控制观点以保证商业惯例正确地实施。存储程序同样能实现改善性能。许多的任务被执行为一系列的SQL语句。条件逻辑被应用到第一个SQL语句的结果决定哪一个后续的SQL语句被执行。如果这些SQL语句以及条件逻辑别写到一个存储程序内,他们将成为服务器上单一执行计划的一部分。结果并不需要返回给客户机来应用条件逻辑。所有的工作都是由服务器来完成的。C只是利用插入触发器并没有什么效果,如果容器的体积改变值会被更新,触发器也将被更新。注意:触发器是一系列的存储程序,当 UPDATE, INSERT, or DELETE
47、语句操作表或视图时触发器自动执行。 当数据被修改时触发也可用于自动执行企业条例以及被执行来拓展限制、 缺省以及规则的整型测试逻辑。 每当他们提供应用的必需的功能限制和缺省应该被使用。触发器只有当 UPDATE, INSERT or DELETE是针对表或视图操作时能够用于运行计算和返回结果。 触发器所返回的结果是有任何触发器内的查询语句来产生的。包括触发器内的 SELECT语句而不是那些只含参数的语句,这些只含参数的语句并不被推荐因为用户并不希望在操作 UPDATE,INSERT, or DELETE 时任何数据返回。DSQL Server 表包含可计算的列。这些可计算的列只能运用同一表中的常
48、数、函数以及其他列。 一个可计算的列并不能运用其他表中的任何列。 我们不能利用一个可计算的列来存储容器的体积。11 你是一个医院的数据库管理员, 医院大楼共 26 层,每层楼有 4 个设备供应室。你正在设计可使用设备的库存控制数据库。 某些设备必须保持有库存, 当一个设备使用了,通过扫描其条码, 在数据库中减少其相应的库存量。 当一个供应室的某设备数量小于规定的最小数量时,就要通知设备管理员。 你应该咋办?A创建一个存储过程,当库存表更新时调用该存储过程,如果设备数量小于规定的最小数量时,通过调用xp_logevent系统存储过程通知管理员。B创建一个 INSTEADOF UPDATE触发器,
49、当 inserted表中的数量小于规定的最小数量时, SQLAgentMail 给管理员发一个e-mail 。C创建一个 FOR UPDATE触发器,当 inserted 表中的数量小于规定的最小数量时,通过调用 xp_sendmail 系统存储过程通知管理员。D. 安排 SQL server任务调度,每4 小时执行一次任务。设置 notify_level_page = 2 设置任务来测试设备的数量和规定的最小数量;设置任务当数量小于规定的最小数量时, 返回一个错误值这样就会及时通知管理员。答案: C.解释 : FOR UPDATE触发器可以用来检查 INSERT和 UPDATE语句提供的数据
50、,一旦到达某个值时可以发送一个 e-mail 信息, xp_sendmail 是 MS SQL 2000 中用来给给定接受者发送信息的函数。不正确答案 :A: xp_logevent 把用户自定义信息写入 MS SQL Server 日志文件和 Windows 2000 事件查看器,这种方法不能满足此题目要求。B: INSTEAD OF UPDATE触发器可以用来检查 INSERT和 UPDATE语句提供的数据,并且替换该 UPDATE语句。当警告触发或任务完成及失败时, SQLAgentMail 可以设置可发送 e-mail 信息。INSTEAD OF UPDATE触发器可以用来产生警告,接
51、着 SQLAgentMail 可以作出相应的反应,但是 INSTEADOFUPDATE触发器用发送警告的过程替换正常的更新过程。也就是说,只发出警告而不更新表,将破坏数据的安全性。D: 只要条件满足就要给管理员发出通知,例如,当供应室的设备数量小于规定的最小数量时, SQL server 4 个小时才运行一次调度任务,就不能及时通知管理员,只有调度任务运行时,才能通知管理员,这样有可能条件满足 4 小时后,管理员才能收到通知。不能满足本题要求。12 你是一个公司的数据库开发人员,数据库存储员工的工作时间表,一般平均有 5 个用户同时存取这个数据库, 并且查询时间要小于 1 秒。然而,在周五下午或周一早上,大部分雇员输入他们的时间安表数据时,数据库可能会有同时50个用户使用,这时,查询返回时间平均是15到20秒。你需要发现查询变慢的原因并解决这个问题,你将怎么做?a. 使用 sp_lock 和 sp_who 系统存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除店铺经营协议书模板
- 个体化疫苗研发中的转化效率:精准提升
- 泰山人才引进协议书
- 个体化治疗方案的时序优化与长期随访数据管理
- 个体化护理方案在远程医疗中的实施路径
- 传染病防控与医疗废物处理策略
- 2026年新能源行业的研发工程师专业面试题及答案解析
- 2026年项目助理面试题及项目管理工具使用含答案
- 室外墙体粉刷安全协议书
- 收购草场管理协议书模板
- 管理信息系统(同济大学)知到智慧树章节测试课后答案2024年秋同济大学
- 股东撤资协议合同模板
- 亚马逊合伙运营协议书模板
- 医用高等数学智慧树知到答案2024年南方医科大学
- 小学诗词大会题库
- 英文配音社团方案
- 公安出入境培训课件
- 国际视野与全球竞争力
- 中学常用英语口语1000句
- 2022-CSP-J入门级第一轮试题答案与解析
- 面包加工技术 早餐包的制作
评论
0/150
提交评论