现在的位置: 首页 > 综合 > 正文

视图(二) 视图的刷新和创建选项

2013年01月18日 ⁄ 综合 ⁄ 共 1367字 ⁄ 字号 评论关闭
视图刷新
    创建视图时,SQL SERVER 会保存元数据信息用于描述视图、列、安全、依赖等信息。基对象中的架构更改不影响视图的元数据信息,当然如果在建立视图的时候使用WITH SCHEMABINDING选项将不允许修改基表的信息。
下面演示刷新视图的必要性。

首先建立基础表T1和视图V1,代码如下,注意,在T-SQL中检查一个对象是否存在我们首选的方法是使用IF OBJECT_ID()方法。

USE EDUDB
GO
IF OBJECT_ID('dbo.v1') IS NOT NULL
Drop VIEW dbo.V1
GO
IF OBJECT_ID('dbo.T1') IS NOT NULL
Drop TABLE dbo.T1
GO
Create TABLE dbo.T1(COLUMN1 INT ,COLUMN2 INT )
Insert INTO dbo.T1(COLUMN1,COLUMN2) VALUES(0,0)
GO
Create VIEW dbo.V1
AS
    Select * FROM dbo.T1
GO
查询视图V1的数据,如下图所示。

Alter TABLE dbo.T1 ADD COLUMN3 INT
    Insert INTO dbo.V1(COLUMN1,COLUMN2,COLUMN3) VALUES(1,2,3)

下面向T1表中添加一列,然后观察查询V1,数据的变化,可以发现,V1中并不包含新添加的列,也就是新添加的列并没有反映到视图中去,即基对象的更改不影响视图的元数据信息。下面是用系统存储过程刷新视图,从而使基对象的修改能够影响到视图。

EXEC sp_refreshview 'dbo.V1'
    重新查询视图,显示结果如下。

视图选项

创建视图的时候可以指定几个选项,这些选项的作用是控制视图的行为和功能,分别是ENCRYPTION 、SCHEMABINDING和WITH CHECK OPTION。

ENCRYPTION适用于UDF,存储过程和触发器。作用是对对象的定义语句进行加密,但是不要依赖这个关键字,现在网上已经有了破解的方法。如果没有使用这个选项,定义对象或者程序主体的语句将以纯文本的方式存储在表sys.sql_modules(2005版本)或者sysComments中。

    SCHEMABINDING 适用于视图或者是UDF,用于把它们的架构绑定到基对象的架构。如果使用这个关键字创建视图,SQL SERVER 将不允许你删除基对象或者修改被引用的列。但是使用这个关键字对于视图的定义语句有两个要求,所有对象必须使用由两部分构成的名称,而且不能在Select 列表中使用*,所有的列都必须被显示的指定。下面是一个简单的例子。

SET NOCOUNT ON
USE EDUDB
IF OBJECT_ID('vw_TopicCourseInfo') IS NOT NULL
    Drop VIEW dbo.vw_TopicCourseInfo
GO
Create VIEW dbo.vw_TopicCourseInfo WITH ENCRYPTION,SCHEMABINDING
AS
Select Topic_ID,Topic_Name
FROM dbo.Topic AS T
Where EXISTS
    (Select 1 FROM dbo.Course AS C
    Where T.Topic_ID=C.Course_Topic_ID)
GO

抱歉!评论已关闭.