zoukankan      html  css  js  c++  java
  • 视图(二) 视图的刷新和创建选项

    视图刷新
        创建视图时,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

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/noviceliu/p/1408438.html
Copyright © 2011-2022 走看看