
第8章视图及其应用 视图(W)》作为一种数据库对象,为用户提供了一种检禽数据表数据的方式。用户通过 视图米润览数据表中感兴愿的部分或全部数据,而数据的物理存放位置仍然在表中。本章将 介绍视图的概念,以及创建、修政和到除视图的方法等。 &1视图的概述 &11税图的概念 视图是一个虚拟表,并不表示任何物理数据,只是用来查看数据的窗口而己。视图与真 正的表很类似,也是由一组命名的列和数据行所组成,其内容由查询所定义。但是视图并不 是以一组数据的形式存储在数据库中。数据库中只存放视图的定义而不存放视图对应的数 据,这些数据仍存做在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询 出来的数据也随之改变。 祝图中的数据行和列都米自干基木表中,是在视图被引用时动态生成的。使用视图可以 集中,荷化和定制用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访月该 视图的基本表。 视图由混图名和程图定义两部分组成。视图是从一个或几个表导出的表,它实际上是一 个查询结果,视图的名字和视图对应的查询存放在数据字具中。在数据岸中视图对应的数据 没有单独存政,这些数据仍存放在导出视图的表中,例如,学生管理数据库中有学生基本信 息表stud_info(stud_id,nane,birthday,.gender,.address,telcode,xipcode,国rk),此表 为基本表。对应一个存错文件。可以在其基础上定义一个男生基本情况表 stud_info_mle(stud_id,ne,hirthday,.rk),它是从stud_info中选择gender='男' 的各个行,然后在stud1d,e,birthday,.ark上投影得到的。在数据库中只存有 stud_info_male的定义,而stud_info_mle的记录不重复#储。在用户看来,视图是通过 不同路径去看一个实际表,就像一个窗口一样,我通过窗户去看外面的高楼,可以看到高 棱的不同部分。而透过视图可以看到数据库中自己感兴整的内容。 81,2使用视图的优点和缺点 1.使用祝图有如下优点: ()数据保密。对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。例如: 对教师基本信息表(teacher_info)创建了计算机系的视图,计算机系的教师就只能使用此视 图,面无法访问其他系数师的数据
第 8 章 视图及其应用 视图(View)作为一种数据库对象,为用户提供了一种检索数据表数据的方式。用户通过 视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存放位置仍然在表中。本章将 介绍视图的概念,以及创建、修改和删除视图的方法等。 8.1 视图的概述 8.1.1 视图的概念 视图是一个虚拟表,并不表示任何物理数据,只是用来查看数据的窗口而已。视图与真 正的表很类似,也是由一组命名的列和数据行所组成,其内容由查询所定义。但是视图并不 是以一组数据的形式存储在数据库中,数据库中只存放视图的定义而不存放视图对应的数 据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询 出来的数据也随之改变。 视图中的数据行和列都来自于基本表中,是在视图被引用时动态生成的。使用视图可以 集中、简化和定制用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访问该 视图的基本表。 视图由视图名和视图定义两部分组成。视图是从一个或几个表导出的表,它实际上是一 个查询结果,视图的名字和视图对应的查询存放在数据字典中。在数据库中视图对应的数据 没有单独存放,这些数据仍存放在导出视图的表中。例如,学生管理数据库中有学生基本信 息表 stud_info(stud_id,name,birthday,gender,address,telcode,zipcode,mark),此表 为 基 本 表 , 对 应 一 个 存 储 文 件 。 可 以 在 其 基 础 上 定 义 一 个 男 生 基 本 情 况 表 stud_info_male(stud_id,name,birthday,mark),它是从 stud_info 中选择 gender=’男’ 的各个行,然后在 stud_id,name,birthday,mark 上投影得到的。在数据库中只存有 stud_info_male 的定义,而 stud_info_male 的记录不重复存储。在用户看来,视图是通过 不同路径去看一个实际表,就像一个窗口一样,我们通过窗户去看外面的高楼,可以看到高 楼的不同部分,而透过视图可以看到数据库中自己感兴趣的内容。 8.1.2 使用视图的优点和缺点 1.使用视图有如下优点: ⑴数据保密。对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。例如, 对教师基本信息表(teacher_info)创建了计算机系的视图,计算机系的教师就只能使用此视 图,而无法访问其他系教师的数据

简化查面操作,为复桑的查询建立一个视图。用户不必键入复杂的查询语句,只需针 对此视图做简单的查淘即可, (钩保证数据的逐辑独立性。对于视图的操作,例如查面。只依赖于视图的定义。当构成 提图的基本表要修改时,只需修改视图定义中的子查询部分。而基于视图的查询不用改变, 2使用视图有如下缺点: 当更新视图中的数据时,实际上是对基本表的数据进行更新。事实上,当从视图中插入 或者别除时,情况也是这样。然面,某些祝图是不能更新数据的,这些视图有如下的特征: 0有I0陈等集合操作符的视图。 0有GFT子句的视图。 0有诸如AG,SM或者X等函数的视图。 0使用DISTINCT短语的视图. 0连接表的视图(其中有一些例外), &2视图的斜建 SQLServer中提供了三种创建视图的方法:使用企业管理器、使用Transact-SgL.语句、 使用视图创建向导程序。下面分别加以介绍。 82,1使用金业管理器创建视图 使用金业管理图创建祝图的方法如下: (I)单击“开始”按绍,选择“程序”一“licrosoftS网L5ever”一“企业管理器”,打 开“SQLServerEnterprisel%mager”窗口. 图8-l带快捷菜单的Enterprisellanager (的双击该窗口左窗格目录树中的服务器。单击“数据库”项左侧的加号(+),展开数据 库组,展开要在其中创建视图的数据库,如图8-】所示。 因这中“程图”图标,此时在右面的窗格中显示当前数据库的所有视图。右击“视图” 项,在弹出菜单中透择“新建视图”选项,打开“新建视图”对话框,如图82所示。 图8-2“新建视图”对话框 ()在“新建视图”对话框中共有四个区,从上到下依次为关系图窗格(表区)、网格窗格 (列区),S窗格SQLseript区)、结果窗格(数据结果区)。在对话医中,单击“添加表 按细或者右键单击最上斓的表区,从弹出菜单中选择“添如表”选项,打开“添如表”对话 都,如图8-3所示。 (⑤从“添加表”对话框提供的列表中选择要使用的表或视图,单击“添加”按钮。或者
⑵简化查询操作,为复杂的查询建立一个视图,用户不必键入复杂的查询语句,只需针 对此视图做简单的查询即可。 ⑶保证数据的逻辑独立性。对于视图的操作,例如查询,只依赖于视图的定义。当构成 视图的基本表要修改时,只需修改视图定义中的子查询部分。而基于视图的查询不用改变。 2.使用视图有如下缺点: 当更新视图中的数据时,实际上是对基本表的数据进行更新。事实上,当从视图中插入 或者删除时,情况也是这样。然而,某些视图是不能更新数据的,这些视图有如下的特征: Ø 有 UNION 等集合操作符的视图。 Ø 有 GROUPBY 子句的视图。 Ø 有诸如 AVG,SUM 或者 MAX 等函数的视图。 Ø 使用 DISTINCT 短语的视图。 Ø 连接表的视图(其中有一些例外)。 8.2 视图的创建 SQLServer 中提供了三种创建视图的方法:使用企业管理器、使用 Transact-SQL 语句、 使用视图创建向导程序。下面分别加以介绍。 8.2.1 使用企业管理器创建视图 使用企业管理器创建视图的方法如下: ⑴单击“开始”按钮,选择“程序”→“MicrosoftSQLServer”→“企业管理器”,打 开“SQLServerEnterpriseManager”窗口。 图 8-1 带快捷菜单的 EnterpriseManager ⑵双击该窗口左窗格目录树中的服务器,单击“数据库”项左侧的加号(+),展开数据 库组,展开要在其中创建视图的数据库,如图 8-1 所示。 ⑶选中“视图”图标,此时在右面的窗格中显示当前数据库的所有视图。右击“视图” 项,在弹出菜单中选择“新建视图”选项,打开“新建视图”对话框,如图 8-2 所示。 图 8-2“新建视图”对话框 ⑷在“新建视图”对话框中共有四个区,从上到下依次为关系图窗格(表区)、网格窗格 (列区)、SQL 窗格(SQLscript 区)、结果窗格(数据结果区)。在对话框中,单击“添加表” 按钮或者右键单击最上端的表区,从弹出菜单中选择“添加表”选项,打开“添加表”对话 框,如图 8-3 所示。 ⑸从“添加表”对话框提供的列表中选择要使用的表或视图,单击“添加”按钮,或者

双击遗中的表暖视图。 6)选择完毕,单击“关闭”按组,关闭“添加表”对话框。图8-3“添加表”对话框 (此时在新建视图窗口中,可看到相应的表成视图,然后从中间表格的“列”中的下拉 列表中选择要使用的列名。或者直接从最上面的图表框中选择相应的列,或把它施入中间的 表格。在列区中选择将包括在视图的数据列,这此时相应的S9 LServer脚本便显示在 SQLseript区. 对每一列的“输出”列进行选中或取清选中,以便控制该列是否要在视图中出属。 (如果需要对某一列进行分组,可右键单击该列,从弹出菜单中选择Go▣pby选项. 通在“标准”列中。输入透择的条件,该条件与距避子句中的条件是对应的。如果在 该列中指定了分组,则该条件与VG子句中的条件相对应。 图8-4创建新视图的预楚结果 D单击该窗口工具栏中的虹色惊叹号)按钮米预竟结果,或者单击“保存”并输入视 图的名称,完成视图的创建,如图8-4所示。 &.2.2使用Transact--5L创建祝图 创建视图也可使用Transact-SqL语句米实现,C邓ATEVIE语句的语法格式如下: CKEATEVIEVviev_name[(colum_name[,...n])] [VITHENCRYPTION] AS SELECT_statenent [VITHCHECKOPTION] 其中组成程图的列名(co小u肌e)要么全部省略要么全部指定,没有第三种选择。知 果省略了视图的列名,则隐含该视图由SELECT.statenent子句中结果集的列名组成。但在 下列3种情况下修美明确指定组成视图的所有列名: ()当视图的列名为表达式或内部函数的计算结果时,而不是单纯的列名时,则需指明新 的列名。在SELECT_statement子句中不许使用0E子句和DISTINCT短语,如果香要持 序,侧可在视图定文后,对税图查淘时再述行排序。 心视图由多个表连接得到,在不同的表中存在同名列,则需要指定列名: (3)需要在祝图中为某个列启用更合适的名字。 VITHENCRYPT0N表示如密透项:AS之后的sECT语句表示视图要完成的操作: ITHCHECKOPT1N选项强制所有通过找图修改的数据满足代码中的SLCT语句中指定的选
双击选中的表或视图。 ⑹选择完毕,单击“关闭”按钮,关闭“添加表”对话框。图 8-3“添加表”对话框 ⑺此时在新建视图窗口中,可看到相应的表或视图,然后从中间表格的“列”中的下拉 列表中选择要使用的列名。或者直接从最上面的图表框中选择相应的列,或把它拖入中间的 表格。在列区中选择将包括在视图的数据列,这此时相应的 SQLServer 脚本便显示在 SQLscript 区。 ⑻对每一列的“输出”列进行选中或取消选中,以便控制该列是否要在视图中出现。 ⑼如果需要对某一列进行分组,可右键单击该列,从弹出菜单中选择 Groupby 选项。 ⑽在“标准”列中,输入选择的条件,该条件与 WHERE 子句中的条件是对应的。如果在 该列中指定了分组,则该条件与 HAVING 子句中的条件相对应。 图 8-4 创建新视图的预览结果 ⑾单击该窗口工具栏中的红色惊叹号(!)按钮来预览结果,或者单击“保存”并输入视 图的名称,完成视图的创建,如图 8-4 所示。 8.2.2 使用 Transact-SQL 创建视图 创建视图也可使用 Transact-SQL 语句来实现,CREATEVIEW 语句的语法格式如下: CREATEVIEWview_name[(column_name[,...n])] [WITHENCRYPTION] AS SELECT_statement [WITHCHECKOPTION] 其中组成视图的列名(column_name)要么全部省略要么全部指定,没有第三种选择。如 果省略了视图的列名,则隐含该视图由 SELECT_statement 子句中结果集的列名组成。但在 下列 3 种情况下必须明确指定组成视图的所有列名: ⑴当视图的列名为表达式或内部函数的计算结果时,而不是单纯的列名时,则需指明新 的列名。在 SELECT_statement 子句中不许使用 ORDERBY 子句和 DISTINCT 短语,如果需要排 序,则可在视图定义后,对视图查询时再进行排序。 ⑵视图由多个表连接得到,在不同的表中存在同名列,则需要指定列名; ⑶需要在视图中为某个列启用更合适的名字。 WITHENCRYPTION 表示加密选项;AS 之后的 SELECT 语句表示视图要完成的操作; WITHCHECKOPTION 选项强制所有通过视图修改的数据满足代码中的 SELECT 语句中指定的选

择条件。 【例81】创建一个简单视图的例子. USEstudent C0 CREATEVIEVstud_view2 AS SELECTstud id.name,address.telcode,zipcode FRWstud_info 【例&2】使用ITHENCR阿10N如密选项 USEstudent 0 /◆查看stud_info表中的所有数据。/ SEL.ECT*FRONstud_info 00 /◆基于stud_info,创建视图stud_view3。◆/ CREATEVIEstud view3 VITHENCRYPTION AS S.ECTstud_idas学号,naneas姓名,addressas地址, telcodeas电话号码.zipc0das却政编码 FROMstud_info WHEREmarkx=560 CO /体查看新建视图stud_v1e3中的所有数据。车/ SELECT#FBOMstud_vies3 执行上述代码将创建视图stud_vien3,其内容包含了stud_info表中“入学成销”大 于等于560的学生清单,且在该视图中的列名已经用汉字标题取代,上述代码的执行结果如 下 图8-5创建和执行带有1THEC家PT10N选项的视图 【例&3】创建视图时,使用I日HECKOPTI0N选项
择条件。 【例 8.1】创建一个简单视图的例子。 USEstudent GO CREATEVIEWstud_view2 AS SELECTstud_id,name,address,telcode,zipcode FROMstud_info 【例 8.2】使用 WITHENCRYPTION 加密选项 USEstudent GO /*查看 stud_info 表中的所有数据。*/ SELECT*FROMstud_info GO /*基于 stud_info,创建视图 stud_view3。*/ CREATEVIEWstud_view3 WITHENCRYPTION AS SELECTstud_idas 学号,nameas 姓名,addressas 地址, telcodeas 电话号码,zipcodeas 邮政编码 FROMstud_info WHEREmark>=560 GO /*查看新建视图 stud_view3 中的所有数据。*/ SELECT*FROMstud_view3 执行上述代码将创建视图 stud_view3,其内容包含了 stud_info 表中“入学成绩”大 于等于 560 的学生清单,且在该视图中的列名已经用汉字标题取代。上述代码的执行结果如 下: 图 8-5 创建和执行带有 WITHENCRYPTION 选项的视图 【例 8.3】创建视图时,使用 WITHCHECKOPTION 选项

USEstudent 00 CREATEVIEVstud_view4 AS SEL.ECTstud_id,name,address.telcode,zipcode,mark+10asadd_mark FRMstud_info WHEREnrk<560 VITHCHECKOPTION 0 SELECTOFRONstud_viewl 【例&4】创建视图时,使用内部橘数, USEstudent 0 CREATEVIEVstud_view5(sex,avg_mark) AS SELECTgender,avg (mark) FRstud_info GMOUPBYcender 00 SELECT*FROMstud_view5 在CREATEVIEV语句中使用AVC、SM等内部函数时,要注意: ()必须提供要创建的视图中列的名称,如se,avg_mark.因为视图的列名之一avR国k 为内部函数的计算结果,所以在定义时需要指明列名。 (②必须使用G0P臂子句, 【例&5】建立计算机系(学号第34位为“01”)学生的视图,并要求进行修政和插入 操作时仍需保证视图只有计算机系的学生。 CREATEVIEVstud_computer AS SEL.ECTstud_id,name,gender FRstud_info
USEstudent GO CREATEVIEWstud_view4 AS SELECTstud_id,name,address,telcode,zipcode,mark+10asadd_mark FROMstud_info WHEREmark<560 WITHCHECKOPTION GO SELECT*FROMstud_view4 【例 8.4】创建视图时,使用内部函数。 USEstudent GO CREATEVIEWstud_view5(sex,avg_mark) AS SELECTgender,avg(mark) FROMstud_info GROUPBYgender GO SELECT*FROMstud_view5 在 CREATEVIEW 语句中使用 AVG、SUM 等内部函数时,要注意: ⑴必须提供要创建的视图中列的名称,如 sex、avg_mark。因为视图的列名之一 avg_mark 为内部函数的计算结果,所以在定义时需要指明列名。 ⑵必须使用 GROUPBY 子句。 【例 8.5】建立计算机系(学号第 3~4 位为“01”)学生的视图,并要求进行修改和插入 操作时仍需保证视图只有计算机系的学生。 CREATEVIEWstud_computer AS SELECTstud_id,name,gender FROMstud_info

HEREsubstr1n暖(stud_id,a,2=’01" VITHCHECKOPTION 6S执行(EATEVIE语句的结果只是把视图的定义存入数据字奥,并不执行其中的 SCT语句,只是在对视图查询时,才按视图的定义从表中将数据查出, 若一个祝图是从单个表导出的,并且具是去掉了表的某些行和某些列,但保留了主关键 字,我们移这类视图为行列子集视图。视图stdc0uter就是一个行列子集视图。 【例总6】建立计算机专业美语(课程号第910位为“01”)成销单的视图。 CREATEVIEVstud_english_grade (no,nane,type,credit,grade) AS SELECTa.stud_id,a.name,b.course_type,b.course_nark,a.grade FRONstud_gradea,lesson_infob WHIEREsubstring (a.stud_id,3.2)='01'ANDsubstring (h.course_id,9.2)='01' 【例87】建立计算机专业莫语的成姨在90分以上的学生的视图。 CREATEVIEVstud_english_grade_90 AS SELECTno,nane,grade FRONstud_english_grade WHEREgrade>=90 【例&8】叫建一个计算机系教师情况的视图teacher_.ies CREATEVIEVteacher_view AS SEL.ECTteacher_id,nane,tech_title FRONteacher_info WHIEREsubstring(teacher_id,1.2)"'01' 其中:视图名字为teacher_view,省略了祝图列表。视图由子查询中的三列 teacher._id,e,tech_title组成。视图创建后,对视图teacher_view的数据的访问只限 制在计算机系内,且只能访问teacher_id,na%,tech_title三列的内容,从而达到了数据 保素的目的。 【例&9】创建学生情况视图stud_course_rade(包括学号、姓名、课程名及成0, CREATEVIEVstud_course_grade(stud_id,name,course_nane,score)
WHEREsubstring(stud_id,3,2)=’01’ WITHCHECKOPTION DBMS 执行 CREATEVIEW 语句的结果只是把视图的定义存入数据字典,并不执行其中的 SELECT 语句。只是在对视图查询时,才按视图的定义从表中将数据查出。 若一个视图是从单个表导出的,并且只是去掉了表的某些行和某些列,但保留了主关键 字,我们称这类视图为行列子集视图。视图 stud_computer 就是一个行列子集视图。 【例 8.6】建立计算机专业英语(课程号第 9~10 位为“01”)成绩单的视图。 CREATEVIEWstud_english_grade(no,name,type,credit,grade) AS SELECTa.stud_id,a.name,b.course_type,b.course_mark,a.grade FROMstud_gradea,lesson_infob WHEREsubstring(a.stud_id,3,2)=’01’ANDsubstring(b.course_id,9,2)=’01’ 【例 8.7】建立计算机专业英语的成绩在 90 分以上的学生的视图。 CREATEVIEWstud_english_grade_90 AS SELECTno,name,grade FROMstud_english_grade WHEREgrade>=90 【例 8.8】创建一个计算机系教师情况的视图 teacher_view。 CREATEVIEWteacher_view AS SELECTteacher_id,name,tech_title FROMteacher_info WHEREsubstring(teacher_id,1,2)=’01’ 其中:视图名字为 teacher_view,省略了 视图列表。视图由子 查询中的三列 teacher_id,name,tech_title 组成。视图创建后,对视图 teacher_view 的数据的访问只限 制在计算机系内,且只能访问 teacher_id,name,tech_title 三列的内容,从而达到了数据 保密的目的。 【例 8.9】创建学生情况视图 stud_course_grade(包括学号、姓名、课程名及成绩)。 CREATEVIEWstud_course_grade(stud_id,name,course_name,score)

AS SELECTstud_id,name,course_name,grade FROIstud_infoa,lesson_infob,stud_gradec WHEREa.stud_id=c.stud_idANDb.course_id=c.course_id 视图stud_course_grade由三个表(siud_infoa,lesson_infob,stud_gradec)连接得 到,在stud_info表和stud_grade表中均存在stud_id列,则需指定视图列名. 【例&10】建立课室(classroom_infa),枚师(teacher_info)、课程(1 esson_info), 课程安排表(teach_schedule)相互对照的视图(schedule_.view). CREATEVIEVschedule_view AS SELECTlesson.course_name,teacher.nane, classroom.roon_nane,schedule.course_week. schedule.course tine.schedule.course id FRclassroom_infoclassroom,teacher_infoteacher, lesson_infolesson,teach_scheduleschedule WHIEREc lassroon.room_id-schedule.room_id ANDteacher.teacher_id-schedule.teacher_id ANDlesson.course_id=schedule.course_id: 这个视图後及到四个基表(classrooa_info,teacher_info、lesson_info、, teach_sche如le)。用户在这个视图上检素可以直接地得到课表中的相关信息,就好像是在 一个表中操作一样。 &2,3使用创建视图向导程序 具体操作步骤如下: (I)单击“开始”按粗,选择“程序”→“icrosoftS0 LServer”一“企业管理器”,打 开“SQLServerEnterpriseManager”窗口. (2的展开服务器组,选释要侧建视图的务器。 (围从图86所示“工具”装单中,选择“白导”选项,打开“选择向导”对话框,如图 8-7所示: 图86从“工具”下拉式深单中选择“向导“ ()在“选择向导”对话框中,展开“数据库”项。双击“创建视图向导”项,则出现创
AS SELECTstud_id,name,course_name,grade FROMstud_infoa,lesson_infob,stud_gradec WHEREa.stud_id=c.stud_idANDb.course_id=c.course_id 视图 stud_course_grade 由三个表(stud_infoa,lesson_infob,stud_gradec)连接得 到,在 stud_info 表和 stud_grade 表中均存在 stud_id 列,则需指定视图列名。 【例 8.10】建立课室(classroom_info)、教师(teacher_info)、课程(lesson_info)、 课程安排表(teach_schedule)相互对照的视图(schedule_view)。 CREATEVIEWschedule_view AS SELECTlesson.course_name,teacher.name, classroom.room_name,schedule.course_week, schedule.course_time,schedule.course_id FROMclassroom_infoclassroom,teacher_infoteacher, lesson_infolesson,teach_scheduleschedule WHEREclassroom.room_id=schedule.room_id ANDteacher.teacher_id=schedule.teacher_id ANDlesson.course_id=schedule.course_id; 这个视图涉及到四个基表 (classroom_info 、 teacher_info 、 lesson_info 、 teach_schedule)。用户在这个视图上检索可以直接地得到课表中的相关信息,就好像是在 一个表中操作一样。 8.2.3 使用创建视图向导程序 具体操作步骤如下: ⑴单击“开始”按钮,选择“程序”→“MicrosoftSQLServer”→“企业管理器”,打 开“SQLServerEnterpriseManager”窗口。 ⑵展开服务器组,选择要创建视图的服务器。 ⑶从图 8-6 所示“工具”菜单中,选择“向导”选项,打开“选择向导”对话框,如图 8-7 所示。 图 8-6 从“工具”下拉式菜单中选择“向导” ⑷在“选择向导”对话框中,展开“数据库”项,双击“创建视图向导”项,则出现创

建视图向导窗口,如图8-8所示。 按照创建视图向导中的提示进行操作,完成对视图的创建。 83视图定义的查请与修改 8.3,1查看和修改视图定义 在创建好税图后,可以查看和修改其定义或对其进行重命名,要查看和修改提图的定义, 既可使用金业管理器。也可使用Transact--SL语句来完成,下面分别加以介绍。 】.使用企业管理器查看和修政视图定义 在SQLServer中,通过企业管理器查看和修改祝图定文主要执行以下步露: 方法1: ()启动企业管理器,登录到指定的服务器。 (打开欲管理视图的数据库文件夹,遗中“视图”图标,此时在右而的窗格中最示当前 数据库的所有视图。 图8-9右击欲看视图。弹出菜单中速“属性”图8-10“查看属性”对话框 ③如图89所示,在右官格中右键单击要查看的视图,在弹出菜单中选择“属性”菜单 项,打开如图8-10所示“查看属性”对话框。 ()在对话框内可国览到祝图定义的SL文本,也可以对该视图定义选行修改。然后单击 “检查语法”按铝来对语句合法性进行检查。若要对视图的访问权限进行设置。请单击“权 限”按辑。 方法2: ()启动企业管理器,登录到指定的服务器。 (打开欲管理视图的数据库文件夹,选中“视图”图标,此时在右面的密格中显示当前 数据库的所有视图。 3因如图8-11所示,在右窗格中右键单击要查看的视图,在弹出菜单中选择“设计视图” 菜单项。即可进入到设计视图的窗口。 ()如果要添如明用表或祝图,可右键单击该窗口最上精的图表框,从弹出装单中选择添 加表”选项,打开“漆加表”对话框。从列表框中这择相应的表成视图进行漆加即可。 (⑤如果要从定义中到除引用表或视图,可该窗口最上端的图表框中,右键单击要到除的 表或视图,从弹出要单中选择“酬除”选项。 在设计礼图窗口中,可以按魔创建新视图的方法对原有的视图送行各种修改,最后存 盘即可。其他操作与创建视图操作相同,可参见8,2节中“创建视图”的介绍
建视图向导窗口,如图 8-8 所示。 ⑸按照创建视图向导中的提示进行操作,完成对视图的创建。 8.3 视图定义的查询与修改 8.3.1 查看和修改视图定义 在创建好视图后,可以查看和修改其定义或对其进行重命名。要查看和修改视图的定义, 既可使用企业管理器,也可使用 Transact-SQL 语句来完成,下面分别加以介绍。 1.使用企业管理器查看和修改视图定义 在 SQLServer 中,通过企业管理器查看和修改视图定义主要执行以下步骤: 方法 1: ⑴启动企业管理器,登录到指定的服务器。 ⑵打开欲管理视图的数据库文件夹,选中“视图”图标,此时在右面的窗格中显示当前 数据库的所有视图。 图 8-9 右击欲看视图,弹出菜单中选“属性”图 8-10“查看属性”对话框 ⑶如图 8-9 所示,在右窗格中右键单击要查看的视图,在弹出菜单中选择“属性”菜单 项,打开如图 8-10 所示“查看属性”对话框。 ⑷在对话框内可浏览到视图定义的 SQL 文本,也可以对该视图定义进行修改,然后单击 “检查语法”按钮来对语句合法性进行检查。若要对视图的访问权限进行设置,请单击“权 限”按钮。 方法 2: ⑴启动企业管理器,登录到指定的服务器。 ⑵打开欲管理视图的数据库文件夹,选中“视图”图标,此时在右面的窗格中显示当前 数据库的所有视图。 ⑶如图 8-11 所示,在右窗格中右键单击要查看的视图,在弹出菜单中选择“设计视图” 菜单项,即可进入到设计视图的窗口。 ⑷如果要添加引用表或视图,可右键单击该窗口最上端的图表框,从弹出菜单中选择“添 加表”选项,打开“添加表”对话框,从列表框中选择相应的表或视图进行添加即可。 ⑸如果要从定义中删除引用表或视图,可该窗口最上端的图表框中,右键单击要删除的 表或视图,从弹出菜单中选择“删除”选项。 ⑹在设计视图窗口中,可以按照创建新视图的方法对原有的视图进行各种修改,最后存 盘即可。其他操作与创建视图操作相同,可参见 8.2 节中“创建视图”的介绍

图8-11右击欲看视图,弹出菜单中意“设计视图”图8-12执行sp_depends获取视图 的参阻对象和列 2通过系统存储过程查看视图的定复信息 在SQLServer中有三个系统存储过程有助于了解栈图信息,它们分别为: ①sp_depends 系统存储过程s印_pns返回系统表中存储的任何信息,该系饶表指出数据库对象所 依赖的对象。 其语法形式:sp_depends[objnane-]'abject 参数[c地nn习'obj©t'为鼓检查的数据库对象,对象可以是表、视图、存储过程 或触发器。 【例&11】执行系统存储过程sp_depends,以获取视图的参题对象和列. 在查询分析器中运行命:Csp_dependsstud_v1ewl,运行结果如图8-12所示, 从图8-12中可以看到视图stud_view1参题了表stud_info中的stu时id,nae, telcode,.address列. ②sp_help 系统存储过程和_ep用来返回有关数据库对象的详细信息,如果不针对某一特定对 象,则返回数据库中所有对象信息 其语法形式:sp_help[objname=]nae] 参数【ob jinane=]nae是sysobjects中的任意对象的名移,成者是在systypes表中任 何用户定义数据类型的名称。 【例&12】执行系统存储过程spel,以取有关数据库对象的详细信息。 图8-l3执行sp_help获取视图详细信息图8-lM执行sp_belptext查看视图的定义信息 在查诸分析器中运行命令:Cs却helpstud_computer,运行结果如图8-13所示, 厦sp_helptext 系统存储过程s印helptext检索出视图、触爱器、存储过程的定义文本。 其语法为:sp_helptext[objname]”nae" 参数[地na=问]'a’为对象的名称,将显示对象(视图成触发器或存储过)的定 义信息。对象必须在当前数据岸中。 【例&13】执行系统存储过程p_helptext查看视图的定文信息, 在查询分析器中运行命令,EXECsp_helptextstud_view2,运行结果如图8-14所示
图 8-11 右击欲看视图,弹出菜单中选“设计视图”图 8-12 执行 sp_depends 获取视图 的参照对象和列 2.通过系统存储过程查看视图的定义信息 在 SQLServer 中有三个系统存储过程有助于了解视图信息,它们分别为: ①sp_depends 系统存储过程 sp_depends 返回系统表中存储的任何信息,该系统表指出数据库对象所 依赖的对象。 其语法形式:sp_depends[@objname=]’object’ 参数[@objname=]’object’为被检查的数据库对象。对象可以是表、视图、存储过程 或触发器。 【例 8.11】执行系统存储过程 sp_depends,以获取视图的参照对象和列。 在查询分析器中运行命令:EXECsp_dependsstud_view1,运行结果如图 8-12 所示。 从图 8-12 中可以看到视图 stud_view1 参照了表 stud_info 中的 stud_id,name, telcode,address 列。 ②sp_help 系统存储过程 sp_help 用来返回有关数据库对象的详细信息,如果不针对某一特定对 象,则返回数据库中所有对象信息。 其语法形式:sp_help[[@objname=]name] 参数[@objname=]name 是 sysobjects 中的任意对象的名称,或者是在 systypes 表中任 何用户定义数据类型的名称。 【例 8.12】执行系统存储过程 sp_help,以获取有关数据库对象的详细信息。 图 8-13 执行 sp_help 获取视图详细信息图 8-14 执行 sp_helptext 查看视图的定义信息 在查询分析器中运行命令:EXECsp_helpstud_computer,运行结果如图 8-13 所示。 ③sp_helptext 系统存储过程 sp_helptext 检索出视图、触发器、存储过程的定义文本。 其语法为:sp_helptext[@objname=]’name’ 参数[@objname=]’name’为对象的名称,将显示对象(视图或触发器或存储过程)的定 义信息。对象必须在当前数据库中。 【例 8.13】执行系统存储过程 sp_helptext 查看视图的定义信息。 在查询分析器中运行命令:EXECsp_helptextstud_view2,运行结果如图 8-14 所示

【例8.14】执行系统存储过程s功helptext查看已加密的视图的定文信息。在查诲分 析器中运行命令:EXECsp_helptextstud_vi3运行结果知图8-15所示。图8-15执行 sp_helptext查看已知密的栈图 3使用Transact-5gL语句修改视图定义 当修改视图的基表时,有可能因修改不当影响视图的可能性。利用视图修改语句可以检 查出视图是否可用。修政对视图的定文,通常使用ALTERVIE围语句。LETE西语句的语法 格式如下: ALTERVIEWview_name[(colum_mame[....n])] [VITHENCRYPTION] AS SELECT_statenent [VITHCHECKOPTION] 【例&15】一个修政锐图定义的例子, USEstudent 00 /体显示修政前视图stud_vie2的内容。/ SELECT FROMstud_view2 00 AL.TERVIEVstud view2 AS SELECTstud_id,name,gender,mark FRMstud_info WHEREnark(600 00 /体显示修政后视图stdv1ew2的内容。/ SELECTOFRONstud_viev2 4重命名祝图 一般情况下,可使用下面两种方法对视图进行重命名:使用企业管理器,咸者使用 sp_renare系统存储过程,下面分别如以介绍: ()使用企业管理器对视图进行重命名
【例 8.14】执行系统存储过程 sp_helptext 查看已加密的视图的定义信息。在查询分 析器中运行命令:EXECsp_helptextstud_view3 运行结果如图 8-15 所示。图 8-15 执行 sp_helptext 查看已加密的视图 3.使用 Transact-SQL 语句修改视图定义 当修改视图的基表时,有可能因修改不当影响视图的可能性。利用视图修改语句可以检 查出视图是否可用。修改对视图的定义,通常使用 ALTERVIEW 语句。ALTERVIEW 语句的语法 格式如下: ALTERVIEWview_name[(column_name[,...n])] [WITHENCRYPTION] AS SELECT_statement [WITHCHECKOPTION] 【例 8.15】一个修改视图定义的例子。 USEstudent GO /*显示修改前视图 stud_view2 的内容。*/ SELECT*FROMstud_view2 GO ALTERVIEWstud_view2 AS SELECTstud_id,name,gender,mark FROMstud_info WHEREmark<600 GO /*显示修改后视图 stud_view2 的内容。*/ SELECT*FROMstud_view2 4.重命名视图 一般情况下,可使用下面两种方法对视图进行重命名:使用企业管理器,或者使用 sp_rename 系统存储过程,下面分别加以介绍: ⑴使用企业管理器对视图进行重命名