
5.2 使用管理器管理视图
用户可以使用SQL Server Management Studio或T-SQL在SQL Server 2016中创建视图,将视图用于以下用途:
(1)集中、简化和自定义每个用户对数据库的认识。
(2)用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问底层基表的权限。
(3)提供向后兼容接口来模拟架构已更改的表。
5.2.1 创建新视图
在数据库中创建了一个或者多个表之后,就可以创建视图了,可以使用视图这种数据库对象以指定的方式查询一个或者多个表中的数据。
(1)限制和局限:只能在当前数据库中创建视图,视图最多可以包含1024列。
(2)权限:要求在数据库中具有CREATE VIEW权限,并具有在其中创建视图的架构的ALTER权限。
使用查询和视图设计器创建视图的步骤如下:
步骤01 在【对象资源管理器】中展开要创建新视图的数据库。
步骤02 右击【视图】文件夹,然后单击【新建视图…】命令,如图5.1所示。

图5.1 新建视图
步骤03 在【添加表】对话框中,从图5.2所示的选项卡之一选择要在新视图中包含的元素:“表”“视图”“函数”“同义词”。

图5.2 添加表
步骤04 单击【添加】按钮,再单击【关闭】按钮。
步骤05 在【关系图】窗格中,选择要在新视图中包含的列或其他元素,如图5.3所示。

图5.3 关系图窗格
步骤06 在【条件】窗格中,选择列的其他排序或筛选条件。
步骤07 在【文件】菜单上,单击【保存view name】按钮。
步骤08 在【选择名称】对话框中,输入新视图的名称并单击【确定】按钮,如图5.4所示。

图5.4 视图名称
完成后,创建的视图View_stu如图5.5所示。

图5.5 视图View_stu
5.2.2 查看视图信息
1.查询和视图设计器工具
当打开视图的定义、显示查询或视图的结果或者创建或打开查询时,查询和视图设计器将会打开。它由4个不同的窗格组成:
(1)【关系图】窗格以图形形式显示通过数据连接选择的表或表值对象,同时也会显示它们之间的连接关系。
(2)【条件】窗格用于指定查询选项(例如要显示哪些数据列、如何对结果进行排序以及选择哪些行等),可以通过将选择输入到一个类似电子表格的网格中来进行指定。
(3)用户可以使用SQL窗格创建自己的SQL语句,也可以使用【条件】窗格和【关系图】窗格创建语句,在后面这种情况下将在SQL窗格中相应地创建SQL语句。生成查询时,SQL窗格将自动更新并重新设置格式以便于阅读。
(4)【结果】窗格显示最近执行的选择查询的结果。
这些窗格对于处理查询和视图非常有用。当用户打开一个视图或查询时,以上部分或全部窗格将随之打开。所打开的窗格取决于【选项】对话框中的设置以及用户所连接的数据库管理系统,默认设置是4个窗格全都打开。
在对象资源管理器中,右击要打开的视图,然后单击【设计】菜单项或【打开视图】菜单项即可打开视图,如图5.6所示。

图5.6 打开视图
2.【关系图】窗格
【关系图】窗格以图形形式显示用户通过数据连接选择的表或表值对象,同时也会显示它们之间的连接关系。在【关系图】窗格中可以进行的操作包括添加或移除表和表值对象,并指定要输出的数据列和创建或修改表和表值对象之间的连接。
当在【关系图】窗格中进行更改时,【条件】窗格和SQL窗格会自动更新以反映所做的更改。例如,如果在【关系图】窗格内的表或表值对象窗口中选择某个要输出的列,查询和视图设计器会将该数据列添加到【条件】窗格中以及SQL窗格内的SQL语句中。
每个表或表值对象在【关系图】窗格中均作为单独的窗口出现。每个矩形的标题栏中的图标表示该矩形所代表的对象类型,如表5.1所示。
表5.1 关系图对象类型

(1)表
列出可以添加到【关系图】窗格中的表。若要添加某个表,则选择该表,再单击【添加】菜单项。若要同时添加多个表,可以先选择这些表,再单击【添加】菜单项。
(2)视图
列出可以添加到【关系图】窗格中的视图。若要添加某个视图,则选择该视图,再单击【添加】菜单项。若要同时添加多个视图,可以先选择这些视图,再单击【添加】命令。
(3)函数
列出可以添加到【关系图】窗格中的用户定义的函数。若要添加某个函数,则选择该函数,再单击【添加】命令。若要同时添加多个函数,可以先选定这些函数,再单击【添加】命令。
(4)本地表
列出由查询创建的表而不是数据库中的表。
(5)同义词
列出可以添加到【关系图】窗格中的同义词。若要添加某个同义词,则选择该同义词,再单击【添加】命令。若要同时添加多个同义词,可以先选择这些同义词,再单击【添加】命令。
如果查询涉及连接,在连接所涉及的数据列之间将显示一条连接线。若没有显示连接的数据列(例如,表或表值对象窗口已最小化或者此连接涉及表达式),则查询和视图设计器会将连接线放在表示表或表值对象的矩形的标题栏中。查询和视图设计器为每个连接条件显示一条连接线。
连接线中间的图标形状指示表或表结构对象的连接方式。若连接子句使用等于(=)以外的运算符,则该运算符将显示在连接线图标中。在连接线中显示的图标如表5.2所示。
表5.2 连接线中显示的图标

连接线末端的图标表示连接的类型。连接的类型以及可在连接线末端显示的图标如表5.3所示。
表5.3 连接线末端显示的图标

3.【条件】窗格
【条件】窗格用于指定查询选项(例如要显示哪些数据列、如何对结果进行排序以及选择哪些行等),可以通过将选择输入到一个类似电子表格的网格中来进行指定。在【条件】窗格中,可以指定:
● 要显示的列以及列名别名。
● 列所属的表。
● 计算列的表达式。
● 查询的排序顺序。
● 搜索条件。
● 分组条件,包括用于摘要报告的聚合函数。
● UPDATE或INSERT INTO查询的新值。
● INSERT FROM查询的目标列名。
在【条件】窗格中所做的更改将自动反映到【关系图】窗格和SQL窗格中。同样,【条件】窗格也会自动更新以反映在其他窗格中所做的更改。
4.SQL窗格
可以使用SQL窗格创建自己的SQL语句,也可以使用【条件】窗格和【关系图】窗格创建语句,在后面这种情况下将在SQL窗格中相应地创建SQL语句。生成查询时,SQL窗格将自动更新并重新设置格式以便于阅读。
若要打开SQL窗格,可以首先打开查询和视图设计器(在服务器资源管理器中选择相应的数据库对象后,在【数据库】菜单中单击【新建查询】),然后在【查询设计器】菜单中指向【窗格】,再单击【SQL】。在SQL窗格中,可以进行以下操作:
(1)通过输入SQL语句创建新查询。
(2)根据在【关系图】窗格和【条件】窗格中进行的设置,对查询和视图设计器创建的SQL语句进行修改。
(3)输入语句以利用所使用数据库的特有功能。
5.【结果】窗格
【结果】窗格显示最近执行的SELECT查询的结果(其他查询类型的结果在消息框中显示)。若要打开【结果】窗格,可以打开或创建一个查询或视图,或者返回某个表的数据。如果默认情况下不显示【结果】窗格,可以在【查询设计器】菜单中指向【窗格】,再单击【结果】命令。用户可以在【结果】窗格中执行的操作如下:
(1)在类似于电子表格的网格中查看最近执行的SELECT查询的结果集。
(2)对于显示单个表或视图中的数据的查询或视图,可以编辑结果集中各个列的值、添加新行以及删除现有的行。
6.SQL编辑器
使用SQL编辑器可以编辑现有的存储过程、函数、触发器和SQL脚本。当用户打开上述任何对象时,此窗口将打开。若要创建要对数据源运行的新的SQL语句,可以使用查询设计器的SQL窗格。SQL编辑器提供了许多有用的SQL文本编辑功能,包括:
(1)对SQL关键字进行颜色编码,以最大限度地减少语法和拼写错误。
(2)生成主干存储过程和触发器。
(3)提供有用的编辑功能,包括剪切、复制、粘贴和拖动操作。
(4)更改编辑器的行为(通过在【工具】菜单中选择【选项】)以修改虚空格、自动换行、行号和制表符大小。
(5)帮助管理调试断点。
7.获取有关视图的信息
在SQL Server 2016中,通过使用SQL Server Management Studio或T-SQL可以获取有关视图的定义或属性的信息。
(1)使用对象资源管理器获取视图属性
使用对象资源管理器获取视图属性的步骤为:在【对象资源管理器】中,单击包含要查看属性的视图的数据库旁边的加号,单击加号以展开【视图】文件夹,然后右击要查看其属性的视图,选择【属性】菜单项,打开如图5.7所示的【视图属性】对话框。

图5.7 对象资源管理器中视图的信息
【视图属性】对话框中显示以下属性。
● 服务器:当前服务器实例的名称。
● 数据库:包含此视图的数据库的名称。
● 用户:此连接的用户名。
● Schema:显示视图所属的架构。
● 创建日期:显示视图的创建日期。
● 名称:当前视图的名称。
● 系统对象:指示视图是否为系统对象,值为True和False。
● ANSI NULL:指示创建对象时是否选择了ANSI NULL选项。
● 带引号的标识符:指示创建对象时是否选择了【带引号的标识符】选项。
● 架构已绑定:指示视图是否绑定到架构,值为True和False。
● 已加密:指示视图是否已加密,值为True和False。
(2)使用视图设计器工具获取视图属性
① 在【对象资源管理器】中,展开包含要查看属性的视图的数据库,然后展开【视图】文件夹。
② 右击要查看其属性的视图,然后选择【设计】菜单项。
③ 右击【关系图】窗格中的空白区域,再单击【属性】命令,出现如图5.8所示的【属性】窗格。

图5.8 视图设计器中视图的信息
【属性】窗格中显示以下属性。
● (名称):当前视图的名称。
● 服务器名称:当前服务器实例的名称。
● 架构:显示视图所属的架构。
● 数据库名称:包含此视图的数据库的名称。
● 说明:对当前视图的简短说明。
● GROUP BY扩展:指定对于基于聚合查询的视图,附加选项可用。
● SQL注释:显示SQL语句的说明。若要查看或编辑完整的说明,可以单击相应的说明,再单击属性右侧的省略号(…)。注释可以包含视图使用者和使用时间等信息。
● Top规范:展开此项可显示Top、“百分比”“表达式”和“等同值”属性。
Top:指定视图将包括TOP子句,该子句只返回结果集中的前n行或前百分之n行。默认情况下,视图将在结果集中返回前10行。使用此项可更改返回的行数或指定不同的百分比。
表达式:显示视图将返回的百分比(如果“百分比”设置为“是”)或记录(如果“百分比”设置为“否”)。
百分比:指定查询将包含一个TOP子句,仅返回结果集中前百分之n行。
等同值:指定视图将包括WITH TIES子句。如果视图包含ORDER BY子句和基于百分比的TOP子句,WITH TIES将非常有用。若设置了该选项,并且百分比截止位置在一组行的中间,且这些行在ORDER BY子句中具有相同的值,则视图将会扩展,以包含所有这样的行。
● 绑定到架构:防止用户以会使视图定义失效的任何方式修改影响此视图的基础对象。
● 非重复值:指定查询将在视图中筛选出重复值。当只使用表中的部分列并且这些列可能包含重复值时,或者当连接两个或更多表的过程会在结果集中产生重复行时,此选项非常有用。选择该选项等效于向SQL窗格内的语句中插入关键字DISTINCT。
● 更新规范:展开此项可显示“使用视图规则更新”和“Check选项”属性。
● 输出所有列:显示所有列是否都由所选视图返回。这是在创建视图时设置的。
5.2.3 创建基于视图的视图
SQL支持创建基于视图的视图。例如,在上述示例中创建了View_stu视图,在该视图上还可以创建视图,如图5.9所示。

图5.9 创建基于视图的视图
5.2.4 删除视图
当一个视图不再需要时,可以将其从数据库中删除,以回收当前使用的磁盘空间。这样数据库中的任何对象都可以使用此回收空间。
(1)限制和局限:删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息。还将删除视图的所有权限。使用DROP TABLE删除的表上的任何视图都必须使用DROP VIEW显式删除。
(2)权限:需要有对SCHEMA的ALTER权限或对OBJECT的CONTROL权限。
从数据库中删除视图的步骤如下:
步骤01 在【对象资源管理器】中展开包含要删除的视图的数据库,然后展开【视图】文件夹。
步骤02 右击要删除的视图,然后单击【删除】命令,如图5.10所示。
步骤03 在【删除对象】对话框中单击【确定】按钮。

图5.10 删除视图