我已使用CREATE VIEW dbo.myView AS SELECT * FROM dbo.myTable
创建了一个视图。向myView
添加列时,dbo.myTable
未选择新列。有没有办法让我的视图选中表中的所有列,即使我添加列而不必更新视图?
答案 0 :(得分:5)
没有。您必须通过重新创建或使用sp_refreshview
来更新视图。
CREATE VIEW
中记录了这一点:
如果未使用
SCHEMABINDING
子句创建视图,则应在对视图下方影响视图定义的对象进行更改时运行sp_refreshview
。否则,查询时视图可能会产生意外结果。
而且SCHEMABINDING
也没有帮助你 - 因为这会阻止你甚至使对基表进行更改。
通常,SELECT * ...
是一种懒惰的简写,你应该使用它的唯一地方是IF EXISTS()
测试。在其他任何地方,你基本上都是为了表现不佳(特别是如果其他人后来出现并在你的桌子上添加了一个包含每一行莎士比亚全集的新专栏)。