三、使用T-SQL语句创建视图
上面介绍了使用图形工具创建视图的步骤,下面将介绍使用T-SQL语句进行视图的创建,其语法格式如下:
CREATE [<owner>] VIEW_name [ (column [, ...n] )] [WITH <attribute> [, ...n] ]
AS
select_statement
[WITH CHECK OPTION]
<attribute>::=
{ ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
语法:
CREATE VIEW 视图名[(列名[,...n])] --指定视图列名
AS SELECT查询语句
视图创建的说明:
准则
可以在其他视图的基础上创建视图。
SELECT查询语句如果包含ORDER BY子句,则必须在SELECT子句后加TOP参数。
不能为视图定义全文索引。
必须指定视图中列的名称
视图中的列是从算术表达式、内置函数或常量派生而来的。
视图中存在两列或多列具有相同的名称(由于定义中通常涉及多个基表的连接)。
希望为视图中的列指定一个与基表列不同的名称,视图列将继承基表列的数据类型。
若无需在创建视图时指定列名,SQL Server会为视图中的列指定与创建视图的查询所引用的列,拥有相同的名称和数据类型。
例:在图书管理数据库“Library”中,由图书表“Book”创建出人民邮电出版社出版的图书视图“View_BookPostTel”。
代码:
USE Library
GO
CREATE VIEW View_BookPostTel --创建视图
AS --为以下子查询
SELECT BID,Bname,Author,Publisher,Price
FROM Book
WHERE Publisher='人民邮电出版社'
任务 查看视图信息
视图创建好后,SQL Server会将所创建视图和视图的基本信息保存在系统表中,而且系统允许用户通过查看视图的属性来获得与视图相关的具体信息。视图的信息存放在SQLServer以下几个的系统表中。
sysobjects:存放视图名称等基本信息。
syscolumns:存放视图中定义的列。
sysdepends:存放视图的依接关系。
syscomments:存放定义视图的文本。
一 、查看视图基本信息
可以使用系统存储过程来显示视图的名称、拥有者及创建时间,其语法格式如下:
sp_help view_ name
语法参数的含义如下。
关键字sp_help:表示查看视图特征。
view_name:是所查看的视图名称。
二、 查看视图文本信息
如果视图在创建或修改时没有加密,那么可以使用系统存储过程来显示视图定义的语句,否则,如果视图被加密,那么连视图的拥有者和系统管理员都无法看到它的定义。其语法格式如下:
sp_helptext view_name
三、 查看视图的依赖关系
有时候需要查看视图与其他数据库对象之间的依赖关系,比如,视图在哪些表的基础上创建、又有哪些数据库对象的定义引用了该视图等。可以使用系统存储过程查看,其语法格式如下:
sp_depends view_name
修改视图和创建视图一样,也有两种方法,即使用SSMS或者使用T-SQL修改视图信息。
一 、通过SSMS修改视图信息
二 、通过T-SQL修改视图信息
除了可以通过SSMS修改视图信息以外,还可以通过T-SQL语句来修改视图的信息,其语法格式如下:
ALTER VIEW view_name [ <column [, ...n] ) ]
[WITH ENCRYTION]
AS
sele_statement
FROM table name
[WITH CHECK OPTION]
语法:
ALTER VIEW 视图名
AS SELECT 查询语句
说明:
此命令可以修改已经创建了的视图,除命令不同以外,其他参数与创建视图语句中的参数完全相同。
例4:修改人民邮电出版社出版的图书视图“View_BookPostTel”,为视图指定列名。
代码:
ALTER VIEW View_BookPostTel(图书编号,书名,作者,出版社,价格) --指定视图中每列的名称
AS SELECT BID,Bname,Author,Publisher,Price
FROM Book
WHERE Publisher='人民邮电出版社'
注意:
不允许修改视图中表达式、聚合函数和GROUP BY子句派生的列。
视图来自多个表时,不允许插入和删除数据行
其他操作都可以把视图当做(虚)表来进行
例6:
从读者借书应还日期信息视图“View_RBorrow”中查询出读者“程鹏”所借图书的应还日期等信息。
代码:
例7:通过视图“View_BookPostTel”插入一本人民邮电出版社出版的名为“SQL Server 2008数据库设计与实现”的图书。
代码:
二、 使用UPDATE更新数据
在视图中更新数据也与在基表中更新数据的操作一样,但是当视图基于多个基表中的数据时,与插入操作一样,每次更新操作只能更新一个基表中的数据。在视图中同样使用UPDATE语句进行更新操作,而且更新操作也受到与插入操作一样的限制条件。其语法格式如下:
UPDATE view_name
SET column_name=new_expresion [,…n]
[WHERE conditions]
例8:通过视图“View_BookPostTel” 更新人民邮电出版社出版的名为“SQL Server 2008数据库设计与实现”的图书为“SQL Server 2008数据库设计”。
代码:
UPDATE View_BookPostTel
SET 书名='SQL Server 2008数据库设计'
WHERE 书名='SQL Server 2008数据库设计与实现'
三、 使用DELETE删除数据
使用DELETE语句删除数据的语法格式如下:
DELETE [FROM] view_name [WHERE conditions]
例9:通过视图“View_BookPostTel”删除人民邮电出版社出版的名为“SQL Server 2008数据库设计”的图书。
代码:
DELETE FROM View_BookPostTel
WHERE书名='SQL Server 2008数据库设计'
任务 删除视图
使用SSMS和使用T-SQL语句。
一 、 使用SSMS删除视图
下面通过例子介绍使用图形工具删除视图的方法。
【例7-24】删除view_student视图
(1)启动SSMS,在“对象资源管理器”中展开“数据库”|StudentInfo|“视图”节点,右击视图列表中的dbo.view_student。
(2)在弹出的快捷菜单中选择“删除(F)”命令,弹出“删除对象”对话框。
(3)单击“确定”按钮,完成对view_student视图的删除。
二 、使用T-SQL语句删除视图
上面介绍了使用图形工具删除视图的步骤,下面介绍使用T-SQL语句进行删除视图,格式如下:
DROP VIEW name [ , ...n ]
语法参数的含义如下。
DROP VIEW:用来删除视图。
name:是要删除的视图名称,并且可以同时删除多个视图,当删除多个视图时各视图之间用逗号分开。
语法:
DROP VIEW 视图名
例5:删除视图V1_BOOKS
代码:
DROP VIEW V1_BOOKS
单元七 视图和索引 习题:
一填空题
1.创建唯一性索引时,应保证创建索引的列不包括重复的数据,并且没有两个或两个以上的空值。如果有这种数据,则必须先将其删除,否则索引不能成功创建。
2.一个表最多只可以有_1__个聚集索引。
3.在SQL Server 中,有两种基本类型的索引:简单索引和_复杂索引。
4.查看视图的基本信息可以使用系统存储过程_ sp_help,查看一个视图order view的定义文本信息,可以使用sp_helptext。
5.在SQL Server 2008系统中,可以把视图分成3种类型,即标准视图、索引视图和分区视图。
二选择题
1.“CREATE UNIQUE NONCLUSTERED INDEX indexidON学生表(学号)”语句创
建了一个(D )索引。
A.唯一索引 B.聚集索引
C.主键索引 D.唯一非聚集索引
2.如果需要加密视图的定义文本,可以使用下面( D)子句。
A.WITH CHECK OPTION B.WITH SCHEMABINDING
C.WITH NOCHECK D.WITH ENCRYPTION
3.使用SQL语句通过视图修改基本表中的数据时,其关键字是( C )。
A.CREATE B.UPDATE
C.ALTER D.DROP
4.以下关于视图的描述,正确的是( ABD )。
A.视图是从一个或几个基表或视图中导出的虚表
B.视图并不实际存储数据,只在数据字典中保存其逻辑定义
C.视图里面的任何数据不可以进行修改
D.SQL中的SELECT语句可以像对基表一样来对视图进行查询
5.下列几种情况适合创建索引的是( C )。
A.列的取值范围很少 B.用作查询条件的列
C.频繁搜索的列 D.连接中频繁使用的列