【发布时间】:2013-05-08 14:26:06
【问题描述】:
今天我注意到,当我更改视图中的表时,如果不运行 sp_refreshview,则不会更新该视图的 syscolumns。下面的代码显示了我在说什么
create table Test ( n1 decimal(12,4) )
go
create view VTest as Select * from Test;
go
sp_help VTest
go
alter table Test alter column n1 decimal(12,2)
go
sp_help VTest
请注意,VTest 保持静态,有办法自动化这个过程吗?
【问题讨论】:
-
不,不,不,您不想尝试自己更新 syscolumns(而且您不应该再使用 syscolumns 或 sp_help)。试试
sp_refreshview或sp_refreshsqlmodule。或者首先不在您的视图中使用 SELECT *... 将它们设置为模式绑定,这样您就不会忘记在更改基础表时正确更新它们。 -
PS 我有一张幻灯片专门针对这个问题,在我经常给出的名为“坏习惯”的演示文稿中 - 在视图中使用 SELECT * 绝对是一个坏习惯。
-
这只是一个示例,我对 select * 没有任何看法
-
有没有办法在字段视图中找到被引用的表?
标签: sql sql-server tsql view alter-table