您现在的位置: 晨光科技 >> 文章 >> 技术 >> IT >> 正文  
  SQL Server:视图的架构刷新和绑定         
SQL Server:视图的架构刷新和绑定
[ 作者:佚名    转贴自:http://database.ctocio.com.cn/488/9255488.shtml    点击数:187    更新时间:2011/6/14    文章录入:admin ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

SQL Server:视图的架构刷新和绑定
作者: ddvip,  出处:IT专家网论坛, 责任编辑: 陈子琪, 2009-10-29 13:00

  在数据库设计过程中,我们经常会有这样的情况下

  1. 某个基础表会被多个视图或者存储过程引用

  2. 修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题

  3. 即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息

  要解决这个问题,我这篇文章来详细讲解一下有关的技术

  --第一步:切换当前数据库上下文为


  USE MASTER
  GO

  --第二步:创建一个范例数据库


  CREATE DATABASE demo
  GO

  --第三步:切换当前数据库上下文为


  USE demo
  GO

  --第四步:创建一个范例表格,包含了三个字段


  CREATE TABLE TestTable(ID INT,Name VARCHAR(50),Address VARCHAR(50))
  GO

  --第五步:创建一个视图


  CREATE VIEW TestView
  AS
  SELECT ID,Name,Address FROM TestTable

  --第六步:查看表和视图的架构信息


  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此时会发现视图三个字段与表的三个字段是一致的

  

  --第七步:假设我们需要对表的字段进行修改,例如修改Address字段的长度为256


  ALTER TABLE TestTable ALTER COLUMN Address VARCHAR(256)

  --第八步:我们再来查看表和视图的架构信息


  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此时会发现,表中的Address已经修改为了256长度,而视图仍然是50.

  --这种情况将导致针对视图的查询出现一些意外情况

  --那么,怎么样让视图的架构信息得到刷新呢?

  

  --第九步:通过系统存储过程刷新视图


  EXEC SP_REFRESHVIEW 'TestView'

  --第十步:我们再来查看表和视图的架构信息


  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'
  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'

  --此时会发现,视图和表的架构信息是一致的

  

  --第十一步:假设我们为了避免视图因为没有刷新而出现问题,希望限制TestTable的架构修改。该怎么办呢

  --我们可以通过绑定架构的选项,将视图绑定到表的架构


  ALTER VIEW TestView
  WITH SCHEMABINDING
  AS
  SELECT ID,Name,Address FROM dbo.TestTable --这里的表名字必须写两个部分,就是包含了架构名(dbo)

  --第十二步:此时如果再次尝试修改TestTable就会得到错误提示.因为它已经被一个视图绑定了


  ALTER TABLE TestTable ALTER COLUMN Address VARCHAR(2000)

 

  题外话:

  如果想要刷新存储过程或者函数等其他编程呢?请参考sp_refreshsqlmodule这个存储过程

  如果要自动刷新所有的视图或者存储过程呢?

  --第十三步:生成刷新所有视图的脚本


  SELECT DISTINCT 'EXEC SP_REFRESHVIEW ''' + name + '''' FROM sys.objects WHERE type='V'

  • 上一篇文章: 使用SQL格式化日期(sqlserver)

  • 下一篇文章: MS SQL视图使用详解
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • 轨道钢承重计算公式及应用[109]

  • 【选型】如何为变频器选取阻值…[86]

  • AIS2023参展厂商名录[346]

  • AGV综合选型[170]

  • APIE 2023第4届亚太国际智能装…[138]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[305]

  • 中国反伪科学运动背后的CIA黑手…[494]

  • [转载]袁隆平真言:中国最大的…[668]

  • 台专家:当年我们造IDF时 大陆…[572]

  • 旅日华人:中国严重误判日本民…[577]

  •  
     相 关 文 章
  • 分隔标识符[217]

  • 索引视图如何提高性能[98]

  • 视图的创建及使用(sqlserver 2…[112]

  • MS SQL视图使用详解[117]


  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:253.91毫秒
    Powered by:MyPower Ver3.5