视图的架构刷新和绑定
在数据库设计过程中,我们经常会有这样的情况下
1. 某个基础表会被多个视图或者存储过程引用
2. 修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题
3. 即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息
要解决这个问题,我这篇文章来详细讲解一下有关的技术
--第一步:切换当前数据库上下文为master USE MASTER GO --第二步:创建一个范例数据库 CREATE DATABASE demo GO --第三步:切换当前数据库上下文为demo 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'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2008-06-19 SQL Server 数据库对象的扩展属性
2008-06-19 SQL Server 2005的Resource数据库