SQL Server 视图

什么是视图?

视图是一个虚拟的表,内容源于查询的结果集。只有当视图上建立了索引后,才会具体化。

视图可以筛选和处理数据,而不是直接访问基础表。如:创建一个视图,只展示源表中的几列数据,无需授予用户访问基础表的权限,取而代之的是授予视图访问权限。

为什么用视图?

1、如果是比较复杂的多表联查,可以将这些复杂的语句放在视图中完成,而我们只需要使用简单的语句查询视图即可。

2、保护基础表,敏感列无法被检索出。

3、对视图添加索引,可以提高效率。

创建视图

1、可以使用SSMS工具创建, 视图->新建视图->选表 选列 ->输入名字保存即可。

2、使用T-SQL创建

  1. if exists(select * from sysobjects where name = 'newView') --如果存在删除
  2. drop view newView
  3. go
  4. create view newView --创建视图
  5. as
  6. select 学号=id,姓名=name,年龄=age from student
  7. go
  8. select * from newView

关于order by

  1. if exists(select * from sysobjects where name = 'newView') --如果存在删除
  2. drop view newView
  3. go
  4. create view newView --创建视图
  5. as
  6. select top 10 学号=id,姓名=name,年龄=age from student
  7. order by id desc --如果使用order关键字 则必须指定top
  8. go
  9. select * from newView

修改视图

  1. alter view newView
  2. as
  3. select top 20 * from student
  4. order by id desc --如果使用order关键字 则必须指定top
  5. go

更新架构

  1. --刚刚修改的视图用的是 * 查询的是全部列
  2. --此时修改基础表架构
  3. alter table student add mail varchar(20)
  4.  
  5. --这时源表已经更新架构,但是视图并没有改变 需要调用系统存储过程更新一下
  6. EXEC sp_refreshview studentView
  7. --这时 新的列才会被加进来

更新视图

对视图进行增、删、改操作,其实就是修改源表。但是由于诸多限制(如由多表联查出的视图,只检索出个别字段,但是插入的时候有些源表上的值是非空的就会出问题),一般不修改视图。

所以更新源表即可更新视图。

数据库快照

数据库快照是某一时间点的源数据库的只读静态视图,可以用来恢复数据库。

使用数据库快照必须与源数据库在相同的服务器实例,并且不能对源数据库进行删除、分离、或还原操作。

使用数据库快照

  1. --源表中数据
  2. use webDB
  3. go
  4. select * from student

  1. if exists(select * from sys.databases where name = 'webDB_DBSS')
  2. drop database webDB_DBSS --存在则删除
  3. go
  4. create database webDB_DBSS --创建数据库快照
  5. on
  6. (
  7. name = webDB,
  8. filename='d:\webDB_DBSS.ss' --注意后缀.ss
  9. ) --如果有多个文件需要一一指出
  10. as snapshot of webDB
  11. go

  1. --修改源数据库数据
  2. use webDB
  3. go
  4. update student set name='伟大' where id = 10
  5.  
  6. --查询源数据库数据
  7. select * from student where id = 10
  8.  
  9. --查询快照数据
  10. use webDB_DBSS
  11. go
  12. select * from student where id = 10

修改源数据库,快照数据库并未发生改变。

  1. --修改student表架构
  2. alter table webDB.dbo.student add [address] varchar(20)
  3. select * from webDB.dbo.student
  4.  
  5. --快照中依然没有
  6. select * from webDB_DBSS.dbo.student
  7.  
  8. --删除源数据库student
  9. drop table webDB.dbo.newTable
  10.  
  11. --查询数据库快照该表 依然存在
  12. select * from webDB_DBSS.dbo.newTable

从快照恢复数据到快照创建时刻

  1. restore database webDB
  2. from database_snapshot='webDB_DBSS'
  3. go
  4.  
  5. select * from webDB.dbo.student --修改的值被改回
  6.  
  7. select * from webDb.dbo.newTable --被删除的表 改回

以上得知:任何创建快照之后的修改数据都将被改回!

11、SQL Server 视图、数据库快照的更多相关文章

  1. 关于SQL Server 镜像数据库快照的创建及使用

    从SQL Server 2005 SP 起,SQL 开始支持数据库镜像.它的设计目的是试图为SQL Server 提供一个具有实时性数据同步的灾难恢复技术,即能够提供数据冗余备份,切换起来比较方便.每 ...

  2. SQL Server 从数据库快照还原数据库

    语法: restore database db_name from database_snapshot  = 'db_snapshot_name'; ------------------------- ...

  3. SQL Server 创建数据库快照

    创建数据库快照: 必须在create database 命令中包括源数据库的每一个数据文件,原始逻辑名,新物理名与路径, 不能指定其他属性 create database db_snapshot_na ...

  4. Sql Server 2008R2 数据库发布与订阅

    背景描述: 发布服务器A: (远程端) , 数据库服务名: GUANWANG1 订阅服务器B: (本机)   ,  数据库服务名: PC-LLRDBA 需要从服务器A中数据库发布,然后在B中订阅A发布 ...

  5. 通过 SQL Server 视图访问另一个数据库服务器表的方法

    今天项目经理跑过来对我大吼大叫说什么之前安排让我做一大堆接口为什么没做,我直接火了,之前明明没有这个事情…… 不过事情还要解决,好在两个项目都是用的sqlserver,可以通过跨数据库视图来快速解决问 ...

  6. SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)

    SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo    createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...

  7. SQL Server 2012 数据库笔记

    慕课网 首页 实战 路径 猿问 手记     Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...

  8. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

  9. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

随机推荐

  1. ArcGis Engine 读取自定义prj坐标系文件时,中文名称乱码

    今天测试时发现使用ArcMap自定义一个坐标系,将坐标系名称设置为中文,基准面名称选择为自定义后,然后保存成prj文件. 在自己的程序中读取该prj文件后,发现ISpatialReference 对象 ...

  2. Windows 10正式版密钥大全,Win10激活序列号KEY大全

    最新放出来的Win10密钥:NJ4MX-VQQ7Q-FP3DB-VDGHX-7XM87 MH37W-N47XK-V7XM9-C7227-GCQG9 VK7JG-NPHTM-C97JM-9MPGT-3V ...

  3. Node.js全局对象

    Node.js的全局对象是具有全局性的,它们可在所有的模块中应用.我们并不需要包括这些对象在应用中,而可以直接使用它们.这些对象的模块,函数,字符串和对象本身,如下所述. __filename __f ...

  4. [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】

    题目链接: BZOJ - 1033 题目分析 模拟!纯粹按照题目描述模拟! 这是一道喜闻乐见的经典模拟题! 我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱 ...

  5. oracle 中使用触发器自动生成UUID

    create or replace trigger tri_test before insert on test for each row declare begin if :new.uuid is ...

  6. hdu 5074 Hatsune Miku

    http://acm.hdu.edu.cn/showproblem.php?pid=5074 题意:给你一个的矩阵score[i][j],然后给你一个数列,数列中有一些是-1,代表这个数可以换成1~m ...

  7. TWinControl.SetBounds与TWinControl.UpdateBounds赏析(定义和调用)

    先看它们的函数内容: procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin // 虚函数,TWinCon ...

  8. Struts2 权限验证

    之前的Struts2项目通过再Sitemesh的母版页中使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这 种现仅仅在view层进行,如果未登录用户直接在地址栏输 ...

  9. 数据结构(Splay平衡树): [NOI2007] 项链工厂

    [NOI2007] 项链工厂 ★★★   输入文件:necklace.in   输出文件:necklace.out   简单对比 时间限制:4 s   内存限制:512 MB [问题描述] T公司是一 ...

  10. 数据结构(树链剖分,堆):HNOI 2016 network

    2215. [HNOI2016]网络 ★★★☆   输入文件:network_tenderRun.in   输出文件:network_tenderRun.out   简单对比时间限制:2 s   内存 ...