有没有办法使使用SELECT*的视图与基础表保持同步.
我发现的是,如果对基础表进行了更改,从中选择所有列,则需要"重新创建"视图.这可以通过运行ALTER VIEW语句来简单地实现.
然而,这可能导致一些非常危险的情况.如果您忘记重新创建视图,则不会返回正确的数据.事实上,它可以返回严重混乱的数据 - 列的名称都是错误的和乱序的.
除非您碰巧将测试覆盖,或者数据完整性检查失败,否则什么都不会发现视图是错误的.例如,Red Gate SQL Compare没有发现需要重新创建视图的事实.
要复制问题,请尝试以下语句:
CREATE TABLE Foobar (Bar varchar(20))
CREATE VIEW v_Foobar AS SELECT * FROM Foobar
INSERT INTO Foobar (Bar) VALUES ('Hi there')
SELECT * FROM v_Foobar
ALTER TABLE Foobar
ADD Baz varchar(20)
SELECT * FROM v_Foobar
DROP VIEW v_Foobar
DROP TABLE Foobar
Run Code Online (Sandbox Code Playgroud)
我很想在视图中停止使用SELECT*,这将是一个PITA.某个地方是否有可能解决此问题的设置?
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |