在数据库设计过程中,我们经常会有这样的情况下
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。
--这种情况将导致针对视图的查询出现一些意外情况
--那么,怎么样让视图的架构信息得到刷新呢?