有没有办法让使用SELECT *的视图与基础表保持同步?
我发现,如果对所有列进行选择的基础表发生更改,则需要“重新创建”视图。这可以通过运行ALTER VIEW语句来实现。
但是,这可能会导致一些非常危险的情况。如果您忘记重新创建视图,则它将不返回正确数据。实际上,它可能会返回严重错误的数据-列名全错了且顺序也错了。
除非您已经对其进行了测试或数据完整性检查失败,否则没有任何东西能够发现视图是错误的。例如,Red Gate SQL Compare不能发现需要重新创建视图的事实。
要复制问题,请尝试以下语句:
我发现,如果对所有列进行选择的基础表发生更改,则需要“重新创建”视图。这可以通过运行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
我很想停止在视图中使用SELECT *,但这将会很麻烦。也许有某个设置可以修复这种行为吗?