一、创建视图
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’
说明:如果应用此项用户将无法设计视图。