一、创建视图

1. 通过sql语句

CREATE VIEW 视图名 AS

SELECT语句

(1)可以创建包含一个列或者多个列,一个表或者多个表的视图。

(2)在创建视图时,并非所有的select子查询都可用,如:compute和compute by,order by[除非与top一起连用]。但在查询时可以使用。

(3)在视图创建时,必须为没有标题列指定标题。

(4)WITH CHECK OPTION是 CREATE VIEW语句的一个可选项。WITH CHECK OPTION用于保证所有的 UPDATE和 INSERT语句都满足视图定义中的条件。如果不能满足这些条件,UPDATE或 INSERT就会返回错误。

 

示例:

CREATE VIEW CUSTOMERS_VIEW AS

SELECT name, age

FROM  CUSTOMERS

WHERE age IS NOT NULL

WITH CHECK OPTION;

这里 WITH CHECK OPTION 使得视图拒绝任何 AGE字段为 NULL的条目,因为视图的定义中,AGE字段不能为空。

 

查询:

SELECT *

FROM CUSTOMERS_VIEW 

ORDER BY age;

 如果在创建时定义了别名,则引用视图时不能再引用最初的列名。如果别名含有空格,则需要使用方括号[]将列名括起来。

2. 通过SQL Server的企业管理器创建

参考:http://blog.sina.com.cn/s/blog_9ecbdda10101jt9b.html

 

 

二、删除视图

DROP VIEW view_name;

说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]

 

三、更新视图

示例:

CREATE VIEW Del AS
SELECT  职工号,姓名,部门名称,负责人
FROM work1,  部门
WHERE work1.部门编号=部门.部门编号

 

如果再执行下面的语句时:

UPDATE Del 
SET  职工号='001', 部门名称='wenda'
WHERE  职工号='01'

 

出现错误,不能一次更新两个表的数据列,只能够改成:

UPDATE Del职工号='001' WHERE 职工号='01'
UPDATE Del SET='wenda'WHERE 职工号='01'

 

说明了更新视图的一些限制:

(1)更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列;

(2)不能在使用了DISTINCT语句的视图中更新值;

(3)不能在使用了GROUP BY和HAVING关键字的语句的视图中更新值;

(4)SELECT子句不能包含 ORDER BY子句;

(5)计算得出的列不能更新;

 

四、修改视图

(1)修改定义

视图名 AS 新的SELECT语句

(2)删除视图的行

DELETE FROM ViewName [WHERE Condition]
DELETE FROM CUSTOMERS_VIEW
      WHERE age = 22;

通过视图删除数据最终体现为从基本表中删除数据。

PS:当视图由两个以上的基表构成时,不允许删除视图的数据。

(3)向视图插入新行

可以向视图中插入新行,其规则同(使用 UPDATE 命令)更新视图所遵循的规则相同。

PS:如果视图没有包含原始数据表中所有NOT NULL 的列,则不能向该视图中添加新行。否则就可以像在数据表中插入新行一样,向视图中插入新行。

 

(4)使用WITH CHECK OPTION

       如果如下定义视图:

CREATE VIEW MaleWorker AS
SELECT *
FROM Work
WHERE Gender = ‘Male’

是允许插入不合理的数据的:INSERT MaleWorker VALUES(‘001’,‘Female’,‘20’,‘3000’)

使用WITH CHECK OPTION可以防止这种情况:

CREATE VIEW MaleWorker AS
SELECT *
FROM Work
WHERE Gender = ‘Male’
WITH CHECK OPTION

 

所以说如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况。

 

 

 

五、使用schemabinding的视图[使用绑定到构架]

视图是依赖于表的,如果在一个表中创建一个视图,今后这个表被删除了,试图将不再可用。为了防止用户删除一个有视图在引用的表,可以在创建视图时加上schemabinding关键字。

 

CREATE VIEW View_Salary WITH SCHEMABINDING AS
SELECT Name,
Gender,
Salary
FROM dbo.work

 

说明:

1)不能使用“*”来创建此类型的视图

2)创建此类型的视图时,一定要加上dbo.表名

3)如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定;

4)如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.

5)如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.

 

六、使用with encryption对视图进行加密

 

CREATE VIEW View_Encryp WITH ENCRYPTION AS
SELECT * 
FROM Work
WHERE Title = ‘Manager’

 

说明:如果应用此项用户将无法设计视图。