2 创建视图
创建视图与创建数据表一样,可以使用SQL Server Management Studio和T-SQL语句两种方法,下面分别介绍这两种方法:
在SQL Server Management Studio中创建视图
在SQL Server Management Studio中创建视图的方法与创建数据表的方法不同,下面举例说明如何在SQL Server Management Studio中创建视图:
(1)启动【SQL Server Management Studio】,连接到本地默认实例,在【对象资源管理器】窗口里,选择本地数据库实例à【数据库】à【Northwind】à【视图】。
(2)右击【视图】,在弹出的快捷菜单里选择【新建视图】选项。
(3)出现的如图9.2所示的视图设计对话框,其上有个【添加表】对话框,可以将要引用的表添加到视图设计对话框上,在本例中,添加产品、订单、订单明细、雇员和运货商五个表。
图2 视图设计对话框
(4)添加完数据表之后,单击【关闭】按钮,返回到如图9.3所示的【视图设计】窗口。如果还要添加新的数据表,可以右击【关系图窗格】的空白处,在弹出的快捷菜单里选择【添加表】选项,则会弹出如图9.2中所示的【添加表】对话框,然后继续为视图添加引用表或视图。如果要移除已经添加的数据表或视图,可以右击在【关系图窗格】里选择要移除的数据表或视图,在弹出的快捷菜单里选择【移除】选项,或选中要移除的数据表或视图后,直接按【Delete】按钮移除。
图3 视图设计
(5)在【关系图窗格】里,可以建立表与表之间的JOIN…ON关系,如【产品】表的“产品ID”与【订单明细】表中的“产品ID”相等,那么只要将【产品】表中的“产品ID”字段拖拽到【订单明细】表中的“产品ID”字段上即可。此时两个表之间将会有一根线连着的。
(6)在【关系图窗格】里选择数据表字段前的复选框,可以设置视图要输出的字段,同样,在【条件窗格】里也可设置要输出的字段。
(7)在【条件窗格】里还可以设置要过滤的查询条件。
(8)设置完后的SQL语句,会显示在【SQL窗格】里,这个Select语句也就是视图所要存储的查询语句。
(9)所有查询条件设置完毕之后,单击【执行SQL】按钮,试运行Select语句是否正确。
(10)在一切测试都正常之后,单击【保存】按钮,在弹出的对话框里输入视图名称,再单击【确定】按钮完成操作。
2.2 用Create view创建视图
2.2 .1 基本语法
用T-SQL的create view语句可以创建视图,其语法为:
CREATE VIEW [ schema_name . ] view_name --架构名.视图名
[ (column [ ,...n ] ) ] --列名
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement [ ; ] --搜索语句
[ WITH CHECK OPTION ] --强制修改语句都必须符合在select_ statement中设置的条件
<view_attribute> ::=
{
[ ENCRYPTION ] --加密
[ SCHEMABINDING ] --绑定架构
[ VIEW_METADATA ] } --返回有关视图的元数据信息
2.2 .2 参数说明
Create view的参数有:
l schema_name:视图所属架构名
l view_name:视图名
l column:视图中所使用的列名,一般只有列是从算术表达式、函数或常量派生出来的或者列的指定名称不同于来源列的名称时,才需要使用。
l select_statement:搜索语句。
l WITH CHECK OPTION:强制针对视图执行的所有数据修改语句都必须符合在select_ statement中设置的条件。
l ENCRYPTION:加密视图。
l SCHEMABINDING:将视图绑定到基础表的架构。
l VIEW_METADATA:指定为引用视图的查询请求浏览模式的元数据时,SQL Server 实例将向 DB-Library、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不返回基表的元数据信息。
2.2 .3 简单用法
例一、创建一个视图,用于查看产品、类别和供应商,其代码如下:
--创建视图
CREATE VIEW view_例一
AS
SELECT 产品.产品ID,产品.产品名称,类别.类别名称,供应商.公司名称
FROM 产品
JOIN 类别 ON 产品.类别ID = 类别.类别ID
JOIN 供应商 ON 产品.供应商ID = 供应商.供应商ID
GO
--查看视图
SELECT * FROM view_例一
GO
其运行结果如图9.4所示:
图4 显示视图
2.2 .4 给视图字段加上别名
例二、创建一个视图,用于查看产品、类别和供应商,并修改其字段名,其代码如下:
CREATE VIEW view_例二(产品编号,产品名称,产品类别,供应商名称)
AS
SELECT 产品.产品ID,产品.产品名称,类别.类别名称,供应商.公司名称
FROM 产品
JOIN 类别 ON 产品.类别ID = 类别.类别ID
JOIN 供应商 ON 产品.供应商ID = 供应商.供应商ID
GO
SELECT * FROM view_例二
GO
其运行结果如图9.5所示,视图的字段名与图9.4中所显示的不一样。
图9.5 为视图加上字段别名
2.2 .5 注意事项
在用create view创建视图时,select子句里不能包括以下内容:
l 不能包括compute、compute by子句
l 不能包括order by子句,除非在select子句里有top子句
l 不能包括option子句
l 不能包括into关键字
l 不能引用临时表或表变量
例三、创建一个视图,查看最新100项产品的产品名称、类别名称和供应商。以下的代码是错误的:
CREATE VIEW view_例三
AS
SELECT 产品.产品ID,产品.产品名称,类别.类别名称,供应商.公司名称
FROM 产品
JOIN 类别 ON 产品.类别ID = 类别.类别ID
JOIN 供应商 ON 产品.供应商ID = 供应商.供应商ID
ORDER BY 产品.产品ID DESC --不能在select子句里使用order by子句
只有在创建好视图后才可以使用order by子句,如:
SELECT top 100 * FROM view_例三
ORDER BY 产品ID DESC
但是如果在select子句里指了top的话,可以使用order by子句,以下代码就是正确的:
CREATE VIEW view_例三
AS
SELECT top 100 产品.产品ID,产品.产品名称,类别.类别名称,供应商.公司名称
FROM 产品
JOIN 类别 ON 产品.类别ID = 类别.类别ID
JOIN 供应商 ON 产品.供应商ID = 供应商.供应商ID
ORDER BY 产品.产品ID DESC