【问题标题】:how to update syscolumns of a view after alter table - T-SQL? [duplicate]如何在更改表后更新视图的 syscolumns - T-SQL? [复制]
【发布时间】: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_refreshviewsp_refreshsqlmodule。或者首先不在您的视图中使用 SELECT *... 将它们设置为模式绑定,这样您就不会忘记在更改基础表时正确更新它们。
  • PS 我有一张幻灯片专门针对这个问题,在我经常给出的名为“坏习惯”的演示文稿中 - 在视图中使用 SELECT * 绝对是一个坏习惯。
  • 这只是一个示例,我对 select * 没有任何看法
  • 有没有办法在字段视图中找到被引用的表?

标签: sql sql-server tsql view alter-table


【解决方案1】:

你需要调用sp_refreshview来更新视图

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)
EXEC sp_refreshview  VTest
go
sp_help VTest

【讨论】:

  • 有没有办法在字段视图中找到被引用的表?
  • 这会有帮助吗?从 syscmets 中选择 c.text c join sysobjects o on o.id=c.id where o.name='Vtest'
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多