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

  • 相关阅读:
    mysql数据库链接与创建
    Jmeter之csv、用户自定义变量以及Query Type分析(八)
    Jmeter之接口测试实战项目运用操作(七)
    SoapUI接口测试之实战运用操作(五)
    SoapUI接口测试之WSDL(四)
    SoapUI接口测试之JDBC(三)
    SoapUI接口测试之HTTP(二)
    Jmeter之参数化(五)
    Jmeter之WSDL(六)
    Java学习之接口
  • 原文地址:https://www.cnblogs.com/noviceliu/p/1408438.html
Copyright © 2011-2022 走看看