• 18、SQL Server 视图


    SQL Server 视图

    一般使用视图来支持即席查询和报表。

    一、视图的用处及优点

    视图最适合用于支持即席查询,而不应将其作为应用程序的核心。

    即席查询创建视图时就遵循的一些原则:

    1、使用视图来简化复杂连接,将数据库架构中用来连接数据的键隐藏起来

    2、将复杂的聚合查询存储为视图

    3、使用别名将含义模糊的列名改为易于理解的名称

    4、只包含用户感兴趣的列

    5、创建视图时,应尽力创建动态的视图,动态视图将有更长的生命周期

    如:where 指定下个月的信息  动态。

    where 指定12月的信息

    开发视图的目标:

    1、让用户能够轻松地获取数据以及禁止用户直接存取数据

    2、通过创建提供正确数据的视图,可以防止用户错误地查询和理解数据。

    二、视图的创建与使用

    使用DDL (Create、Alter、Drop)管理视图

    1、创建:

    Create view 视图名称(列名1,列名2..)

    as

    select 语句

    如:

    create view selectbmname(部门名称)
    
    as 
    
    select bmname from bumen
    
    go
    
    select * from selectbmname

    结果:

    部门名称

    技术部

    后勤部3

    管理部

    销售部

    后勤部

    客户部

    管事

    2、修改

    alter 

    基本语法:

    alter  view  视图名称 (列名,...)

    as

    select 语句

    注:与Create语法一样,用于为视图提供新的Sql Select 语句。

    如:

     go
    
    alter view selectbmname(修改后的部门名称)
    
    as 
    
    select bmname from bumen
    
    go
    
    select * from selectbmname

    结果:

    修改后的部门名称

    技术部

    后勤部3

    管理部

    销售部

    后勤部

    客户部

    管事

    3、删除

    drop view 视图名称

    如:

     drop view selectbmname

    注:在预期将要执行多次的脚本中,可使用下面的代码来删除视图并新建

     if Exists(select * from sysobjects where name='视图名称')

     drop view 视图名称

     create view ....

    三、order by 与视图

    视图用作其他查询的数据源,不支持视图内部对数据进行排序,

    如果视图中有order by 语句,由使用该视图的Sql语句将其作用于视图。

    四、视图的限制

    1、视图不能包含从选定列创建新表的Select into 选项

    2、视图不能引用临时表(名称中包含’#’的表)或表变量

    3、视图不能包含compute 或 compte by列,相反它使用标准聚合函数和分组。

    五、使用视图

    把普通的视图当作一般的只可查询的表使用。

    六、视图保护

    关于视图选项中用于对数据及视图的保护的项。通过创建和修改视图时添加指定的

    项来实现。

    1、保护数据

    基本语法:

    在视图定义的最后加上:With Check Option

    它使where子句进行双向限制,

    限制1:视图只能访问满足条件的表中的行

    限制2:在通过视图插入和更新数据时,只能更新满足条件的数据行。

    注:默认是单向限制,只有限制1.

    通过视图更新和插入数据时,和普通表格的语法一致。

    如:

     create view selectbmname(修改后的部门名称)
    
    as 
    
    select bmname from bumen
    
    with check option

    2、保护视图

    总共有三个选项用来保护视图

    a、架构变更

    当底层数据结构发生变化时,SQL代码往往无法正常运行,视图引用的是表中的数据

    如:视图查询的列不存在,视图就无法正常运行

    解决方法:通过绑定架构可锁定基表,禁止修改基表

    基本语法:

    在create 或 alter 与as之间添加:with schemabinding

    如:

    if Exists(select * from sysobjects where name='selectbmname')
    
    drop view selectbmname
    
    go
    
    create view selectbmname(bmname)
    
    with Schemabinding
    
    as 
    
    select bmname from dbo.bumen 
    
    with check option
    
    go

    注:绑定的架构必须指定架构名,如这里的是dbo,

    限制:1、在Select语句中引用对象时必须指定其所有者

    2、不能选取所有列

    b、加密视图的Select语句

    创建的视图和存储过程的源代码,存储在系统表Syscomments中,任何人都可

    查看,如果需要将其变成密文,可以使用此选项,

    基本语法:

    在create 或 alter 与as之间添加:with encryption

    如:

    create view selectbmname(bmname)
    
    with encryption
    
    as 
    
    select bmname from dbo.bumen 

    c、应用程序元数据

    作用于返回架构信息时。

    加上view_metadata只返回有关视图(而不是引用的表的架构信息)

    如:

    create view selectbmname(bmname)
    
    with encryption,view_metadata
    
    as 
    
    select bmname from dbo.bumen 

    注:有多个with选项时,用逗号隔开。

    七、通过视图进行更新和表中的数据

    一般来说,除非是简单的select语句,否则不能通过它来更新数据,更新方法

    与普通表一样,只不过只能使用视图中指定的列。

    八、视图性能

    视图的一个重要性能与视图对数据加锁有关。

    从本质上说,用视图来查找数据时,如果Select语句很快执行完毕,对数据

    的锁将立即释放。

    九、使用同义词

    它可以替换在许多SQL语句中的一个两、三或四部分的名字。使用同义词可以让你减

    少输入,而且还能提供一个抽象层来为你保护底层对象的改变。

    基本语法:

    Create Synonem 别名 FOR 原对象名称

    当你创建同义词时,相应的对象不需要存在,因为同义词是迟绑定的:当你实际上使用同义词时,SQL Server仅仅检查基对象。

    例如,在AdventureWorks示例数据库中,你可以以下列方式创建一个同义词:

    CREATE SYNONYM ProdCat
    
    FOR AdventureWorks.Production.ProductCategory


    之后,你可以继续使用在SQL语句中的同义词了。例如:

    SELECT * FROM ProdCat



  • 相关阅读:
    jQuery动态效果学习笔记
    jQuery HTML操作学习笔记
    学习编程有必要做笔记吗?
    2017阿里巴巴面试技术挑战赛试题泄露
    来自IOS开发工程师的零基础自学HTML5经验分享
    前端学习笔记之HTML DOM操作
    web前端攻城狮整理的收藏夹
    WEB前端开发初学者必看的学习路线(附思维导图)
    搜狗员工用百度算什么,谷歌员工当着老板的面用bing,结果悲剧了!
    常用站长工具软件汇总,有没有一款你在用?
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3137665.html
Copyright © 2020-2023  润新知