标签:
视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象。可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列;或者也可以创建一个复杂的查询,连接几个表,使的这些表看起来像一个表。
视图的语法如下:
CREATE VIEW <view name>
AS
<SELECT statement>
具体语法:
CREATE VIEW [schema_name].<view name> [(<column name list>)]
[WITH [ENCRYPTION][,SCHEMABINDING][,VIEW_METADATA]]
<SELECT statement>
WITH CHECK OPTION
示例:
CREATE VIEW columnNamePath_vw
AS
SELECT col_name,col_path
From Nx_column
这种形式的视图可以达到的目的是,向特定的用户屏蔽一部分列信息,只显示他需要的列,对于敏感的列屏蔽。
还有一种就是作为过滤的视图,通过使用where子句,达到屏蔽一部分行的信息,只显示他需要的行,对于敏感的行屏蔽。
复杂点的视图,其实也复杂不到哪里去,无非是添加一些inner join,left join之类的东西而已。
此外,还可以通过使用各种函数实现,只返回某一天的数据,或格式经过整理的数据等等。
视图与的工作方式与表很像,但是还是有一些不同之处。在对视图执行INSERT,UPDATE以及DELETE语句时,要记住以下一些内容
1、用连接的数据处理视图变化
如果视图有多个表,那么在很多情况下使用视图来修改数据是不允许的-除非使用INSEEAD OF触发器。
2、必需字段必须在视图中出现或者具有默认值
在默认情况下,如果使用视图来插入数据(内部查询必定有一个单个表的SELECT操作或者至少必须限制插入只影响到一个表,并且使所有必需的列出现),那么必须能为所有的必需字段(不允许为空的字段)提供一些值。不过要认识到任何没有数据以及不接受NULL数值的列需要出现在视图中。以通过视图来执行INSERT操作。
3、通过WITH CHECK OPTION限制插入到视图中的内容
WITH CHECK OPTION是SQL Server中鲜为人知的功能之一。规则很简单-为了通过使用视图更新或者插入数据,结果行必须符合要求以显示在视图结果中。
示例:
CREATE VIEW PortlandAreaAddress_vw
AS
SELECT AddressId,AddressLine1,City,StateProviceID,PostalCode,ModifiedDate
FROM Person.Address
WHERE PostalCode LIKE ‘970%‘ OR PostalCode LIKE ‘971%‘ OR PostalCode LIKE ‘972%‘ OR PostalCode LIKE ‘986[6-9]%‘
WITH CHECK OPTION
如果尝试通过对以上视图来更新一行,将PostalCode设置为不是以97或98开头:
UPDATE PortlandAreaAddress_vw
SET PostalCode = ‘33333‘ --不以97 98 开头
WHERE AddressID = 22
SQL Server会报错
视图进行的插入或更新已失败,原因是目标视图或目标视图所跨越的某一视图指定了WITH CHECK OPTION,而该操作的一个或多个结果行又不符合CHECK OPTION约束。
语句已经终止。
WHERE子句过滤视图的内容,以便只显示970、971、972或9866~9869之间的邮编,并且WITH CHECK OPTION说明任何INSERT或者UPDATE语句必须满足WHERE之间的条件(而33333这个邮编不满足这个条件)。
以上语句如果用表执行是正常的。
在使用T-SQL编辑视图时要记住,这是在完全替换现有的视图。使用ALTER VIEW语句和CREATE VIEW语句的区别主要有以下几点:
要切记第二点,如果删除了视图,然后在CREATE,那么其效果与ALTER VIEW语句基本一样,只是权限信息要全部重建。
删除视图的语法如下:
DROP VIEW <view name>,[<view name>,[...n]]
有两种得到实际视图定义的方法:
sp_helptext示例:
EXEC sp_helptext PortlandAreaAddress_vw
SQL Server返回创建视图的代码
sys.modules示例:
使用该函数的主要问题在于所有对象都用对象ID编码,对象ID是SQL Server跟踪事物的内部方法,他们是整型值而不是用于对象的名称。可以通过使用OBJECT_ID()函数来避开这个问题。
SELECT *
FROM sys.sql_modules
WHERE object_id = OBJECT_ID(‘dbo.PortlandAreaAddress_vw‘)
再次得到SQL Server创建视图的代码,和sp_helptext一样。
加密视图所有必须做的是使用WITH ENCRYPTION选项。技巧:
如果使用ALTER VIEW语句,那么意味着除了访问权限外,完全替换了现有的视图。那么意味着加密方法也被替换了。如果想对被改变的视图加密,那么必须在ALTER VIEW语句中使用WITH ENCRYPTION子句。
示例:
ALTER VIEW CustomerOrders_vw
WITH ENCRYPTION
AS
SELECT.....
现在再对以上视图查看信息:
EXEC sp_helptext CustomerOrders_vw
SQL Server提示如下:
对象‘CustomerOrders_vw‘的文本已加密。
注意:在使用WITH ENCRYPTION之前,必须先备份好源代码,一旦源代码被加密,就没有办法恢复。如果没有在其他地方存储代码,又需要改变代码只有重新编写。
模式绑定实际上就是将视图所依赖的事物(表或者其他视图)“绑定”到视图。起重要意义在于除非首先删除模式绑定的视图,否则没有人可以修改那些对象(CREATE、ALTER)。
其作用如下:
视图注意事项总结:
视图一般用于以下情况:
标签:
原文地址:http://www.cnblogs.com/feng-NET/p/4541537.html