视图的架构刷新和绑定
来源:互联网 发布:磁带备份软件 编辑:程序博客网 时间:2024/06/18 09:24
在数据库设计过程中,我们经常会有这样的情况下
1. 某个基础表会被多个视图或者存储过程引用
2. 修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题
3. 即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息
要解决这个问题,我这篇文章来详细讲解一下有关的技术
--第一步:切换当前数据库上下文为masterUSE MASTERGO--第二步:创建一个范例数据库CREATE DATABASE demoGO--第三步:切换当前数据库上下文为demoUSE demoGO--第四步:创建一个范例表格,包含了三个字段CREATE TABLE TestTable(ID INT,Name VARCHAR(50),Address VARCHAR(50))GO--第五步:创建一个视图CREATE VIEW TestViewASSELECT ID,Name,Address FROM TestTable--第六步:查看表和视图的架构信息SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestView'SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TestTable'--此时会发现视图三个字段与表的三个字段是一致的
--第七步:假设我们需要对表的字段进行修改,例如修改Address字段的长度为256ALTER 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 TestViewWITH SCHEMABINDINGASSELECT ID,Name,Address FROM dbo.TestTable --这里的表名字必须写两个部分,就是包含了架构名(dbo)--第十二步:此时如果再次尝试修改TestTable就会得到错误提示.因为它已经被一个视图绑定了ALTER TABLE TestTable ALTER COLUMN Address VARCHAR(2000)
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
题外话:
- 如果想要刷新存储过程或者函数等其他编程呢?请参考sp_refreshsqlmodule这个存储过程
- 如果要自动刷新所有的视图或者存储过程呢?
--第十三步:生成刷新所有视图的脚本SELECT DISTINCT 'EXEC SP_REFRESHVIEW ''' + name + '''' FROM sys.objects WHERE type='V'.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
本文是使用博客同步和管理系统自动于2009/6/19 11:24:22 从 陈希章@博客园 同步过来的。原文地址: http://www.cnblogs.com/chenxizhang/archive/2009/06/19/1506627.html ,发表于2009/6/19 3:24:00.
- 视图的架构刷新和绑定
- SQL Server:视图的架构刷新和绑定
- SQL Server:视图的架构刷新和绑定
- SQL Server:视图的架构刷新和绑定
- 无法对视图创建索引,因为该视图未绑定到架构的解决方案
- 视图和窗口架构
- mfc 多文档,视图和文档的绑定
- 对ng-if条件的监控和视图刷新
- 物化视图的快速刷新
- 物化视图的刷新问题
- 物化视图的快速刷新
- 物化视图的定时刷新
- 物化视图的快速刷新
- 物化视图的快速刷新
- rup架构的5中视图和uml的解释
- 视图架构和几何属性
- Qt模型和视图架构
- ios视图和窗口架构
- 重建oracle临时表空间
- OpenCV学习——在VC6.0下的安装和基本设置
- 留两个SQL省得下次用重写麻烦
- jQuery Ajax 全解析
- OpenCV学习——摄像头采集视频
- 视图的架构刷新和绑定
- 在Java程序中截获控制台输出(转)
- jfreechart 折线图 线的形状如何设置?
- 工作中人际关系分析与对策
- qt build错误
- 求嵌入式零起点培训
- JS特效,点击图片将其放大
- 跨库操作SQL Server数据库的插入、修改
- 职场生存法则20条