SQL Server 视图

视图在数据库开发过程中是非常重要的,对提高查询速度有很大的提高。因此我们的学会创建视图,并且有效的使用视图。
(1)表准的SQL视图
        标准视图比较简单,大家也都在使用,在此就不垒述了。
(2)使用动态视图
        标准视图有一个严重的局限性,那就是标准视图不支持参数。俗话说“法网恢恢,疏而不漏”,呵呵,我们也可以变通的使用带参数的视图。实现方法是我们把一个用户定义的表值函数当作支持参数的动态视图使用:
        CREATE FUNCTION fnTestView (@m_id int)
        RETURNS TABLE
        AS
        RETURN  (select * from 视图名称 where 条件=@m_id)
这样可以在Select语句的From子句中引用他们,用法:
        Select * from fnTestView(2)

(3)使用索引视图
        我们在使用视图的时候有时想怎么能给视图加索引呢,其实,视图和普通的表一样可以添加索引,当SQL Server必须联合很多表时,这项技术可以大大提高Select语句的性能。
        当在视图上创建一个唯一聚集索引(unique clusterd index)时,SQL Server将物化这个视图。看下面的例子:
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING 
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password, 
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname, 
              dbo.tUsers.sex, dbo.tUsers.birthday, dbo.tUsers.country, dbo.tUsers.city, 
              dbo.tUsers.address, dbo.tUsers.zip, dbo.tUsers.tele, dbo.tUsers.exdate, 
              dbo.tUsers.totalfund, dbo.tUsers.ordertotal, dbo.tUsers.jifen, dbo.tUsers.pid, 
              dbo.tUsers.agentid, dbo.tUsers.agentid2, dbo.tUsers.agentid3, dbo.tUsers.status, 
              dbo.tUsers.checkmod, dbo.tUsers.account, dbo.tUsers.bank, dbo.tUsers.logip, 
              dbo.tUsers.sitename, dbo.tUserInfo.siteurl
        FROM dbo.tUsers INNER JOIN
              dbo.tUserInfo ON dbo.tUsers.userid = dbo.tUserInfo.userid 
        WHERE dbo.tUserInfo.UserID >20

CREATE UNIQUE CLUSTERED INDEX idxvtUser
        ON vtUsers(userid)

尽管这个索引只引用了列的一个子集,但是这个索引包含叶级别节点中的所有列(每个聚集索引也都是这样)。
        和标准视图一样索引视图的创建和使用也都是有限制的。一个标准视图转换为一个索引视图必须遵守以下规则:
A.视图必须使用With Schemabinding选项来创建;
B.在这个视图中不能使用其他视图、导出表、行集函数或自查询,也就是说只能使用表;
C.视图所用到的基本表必须和视图属于同一个所有者;
D.视图只能链接同一个数据库中的表;
E.视图不能包含一个外部链接或自链接,也就是说在链接表时只能使用INNER JOIN并且INNER JOIN前后不能使同一个表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;看下面的例子:
比如说创建了下面的视图(自链接):
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING 
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password, 
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname
        FROM dbo.tUsers Inner join
              dbo.tUsers as t ON dbo.tUsers.userid = t.userid
 这个视图是可以创建的,但是在创建索引时CREATE UNIQUE CLUSTERED INDEX idxvtUser  ON vtUsers(userid) 就会出错了;
再看下面的视图(外部连接):
        CREATE VIEW dbo.vtUsers
        WITH SCHEMABINDING 
        AS
        SELECT dbo.tUsers.userid, dbo.tUsers.username, dbo.tUsers.password, 
              dbo.tUsers.question, dbo.tUsers.answer, dbo.tUsers.email, dbo.tUsers.realname
        FROM dbo.tUsers LEFT OUTER JOIN
              dbo.tUserInfo ON dbo.tUsers.userid = dbo.tUserInfo.userid
        在创建索引时也会出错的。
F. 视图不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct关键字;
G. 视图不允许使用某些集合函数,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;
H. 视图不能使用Select * 这样的语句,也就是说视图的所有字段都必须显示指定;
I. 视图不能包含Text、ntext、image类型的列;
J. 如果视图包含一个Group By子句,那么他必须在Select列中包含count_big(*);
K. 视图中的所有标和用户自定义的函数都必须使用两段式名来引用,即所有者.表或函数名称;
L. 所有的基本表和视图都必须使用 Set Ansi_Nulls On 创建;
M. 在创建索引时或创建索引后执行IUD时,必须显示或隐式地执行:
        Set ANSI_NULLS ON
        SET ANSI_PADDING ON
        SET ANSI_WARNINGS ON
        SET ARITHABORT ON
        SET CONCAT_NULL_YIELDS_NULL ON
        SET QUOTED_IDENTIFIER ON
        SET NUMERIC_ROUNDABORT OFF
       各个选项的有关信息或意义,可以查阅SQL Server的联机丛书,这里就不再介绍了;
N. 索引视图只有在SQL Server2000的企业版或开发版或者更高的版本中才能创建。
        如果一个视图可以添加唯一聚集索引,那么在添加了唯一聚集索引之后,该视图也可以像数据库表一样添加非聚集索引,CREATE INDEX  idxvtUsers ON  vtUsers(username,realname)。

SQL视图(转自http://www.cnblogs.com/fineboy/archive/2005/09/14/236731.html)相关推荐

  1. SQL Server 视图创建点滴 (转http://www.cnblogs.com/fineboy/archive/2008/05/10/236731.html#1191527)...

    2008年6月22日      视图在数据库开发过程中是非常重要的,对提高查询速度有很大的提高.因此我们的学会创建视图,并且有效的使用视图. (1)表准的SQL视图         标准视图比较简单, ...

  2. http://www.cnblogs.com/chio/archive/2007/09/10/888260.html

    一. 虚析构函数 我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数.因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数. 如: cl ...

  3. Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)

    Maverick.Net介绍 Maverick.Net是Java社区开源MVC Web框架Maverick的.Net版本,相关资料可以查看项目主页. 不管Maverick.Net的是非好坏,了解一下它 ...

  4. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...

    11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...

  5. repeater的嵌套(转+总结)[http://www.cnblogs.com/esshs/archive/2005/04/07/132825.html]

    实现效果如下图: 前台代码: Code     <div>         <asp:Repeater ID="Repeater1" runat="se ...

  6. 浅谈C#中的枚举 【转自http://www.cnblogs.com/liyingyi/archive/2005/12/28/306772.html】

    枚举类型是一种的值类型,它用于声明一组命名的常数.    (1)枚举的声明:枚举声明用于声明新的枚举类型.    访问修辞符 enum 枚举名:基础类型     {         枚举成员     ...

  7. C# 中的委托和事件[转自http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html]

    PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf 文中代码在VS2005下通过,由于VS2003( ...

  8. http://www.cnblogs.com/wayfarer/archive/2004/09/29/47896.html

    动态添加程序集 转载于:https://www.cnblogs.com/lovey/archive/2013/04/07/3006112.html

  9. 经典SQL语句大全:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html

    1.常用语句 ***SQL语句的预编译:将语句转为数据流,执行语句前检查语句的语法,但不能知道语句是否能查出结果.此方法有返回值  预编译成功则返回SQLITE_OK----0否则返回SQLITE_E ...

最新文章

  1. 一些常见的名词解释(持续更新中)
  2. JavaFX BorderPane布局代码示例
  3. Java语法糖之foreach
  4. 银联在线支付---利用测试案例代码模拟支付应用(修改)
  5. mac升级php后旧版本还在,Mac下更新自带的PHP版本
  6. WireMock.NET如何帮助进行.NET Core应用程序的集成测试
  7. BestCoder Round #75
  8. 探讨PHP 静态变量 静态方法 初始化类的问题 哪种写法合格
  9. jsp,mysql乱码情况1
  10. 2d游戏引擎_Cocos Creator:用 2D 物理碰撞撸 3D 横版酷跑
  11. jquery api中文手册
  12. 面试被问到HashMap 底层原理?看完这边文章绝对不慌!
  13. 【科普】U盘被写保护的超详细解决方案(收藏不亏~)
  14. Succinctly 中文系列教程(三)20220109 更新
  15. Python:体脂计算
  16. android跳转QQ陌生人聊天或者加入QQ群
  17. c语言 srand,函数srand在C中
  18. 2022,6G发展确已升温
  19. linux切换ip地址脚本,批处理实现的ip地址切换的复杂脚本
  20. PAT 甲级1116 1117 1118 1119 解题报告

热门文章

  1. 医疗时鲜资讯:医疗领域入口的划分
  2. php 砸金蛋抽奖,jQuery+PHP完成砸金蛋抽奖
  3. 红外测距传感器(GP2D12、74HC595、ADC0832)
  4. 老友记第三季第二十三期
  5. H.264 原理与 B 站视频压制技巧
  6. 闲鱼技术人的辞旧迎新
  7. 年轻的Vivaldi浏览器正在从社区中汲取灵感
  8. 微商朋友圈吸粉难?这样发朋友圈让你吸粉无数
  9. 微信近期频繁被限制甚至封号!
  10. 从阿里、腾讯到美团、优信,他们都注重……