table 架构更新后错误的列值 SQL 服务器视图

Wrong column values SQL Server Views after table schema update

我总是问自己,为什么 SQL 服务器上有两个表,而我创建这样的视图:

CREATE VIEW vw_MyView 
AS
SELECT T1.*, T2.ClientName FROM Table1 T1 inner join Table2 T2 on T1.ID_Client=T2.ID_Client

当我需要向 table 1 添加字段时,视图显示值放错地方了吗?第一列的值显示在第二列,依此类推!

这发生在我测试的 SQL 服务器的每个版本上。谁能告诉我为什么会这样以及如何解决?

这种行为会带来很大的问题,尤其是派生视图。 谢谢

更新架构后,您应该刷新依赖于架构的所有视图的视图元数据:

EXEC sp_refreshview @viewName

@viewName 变量保存视图名称的位置。您可以在脚本中使用此存储过程,该脚本可以获取依赖于 table(s) 的视图,以便动态刷新它们,或者您可以旋转所有视图 (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS) 并在每个视图上调用存储过程。

这有一个额外的好处,可以找到任何因架构更改而变得无效的视图并对其进行标记,因为它们会在调用 SP 时出错。

更改 tables 后,已接受的答案可以解决该问题(我也投了赞成票)。 对于我的环境,我更喜欢使用 WITH SCHEMABINDING(请参阅 https://msdn.microsoft.com/en-us/library/ms187956.aspx) for creation of the views. That leads to not being able to use the * in the select of the view as has been discussed here: Why is using '*' to build a view bad?,当然不能在不更改(在大多数情况下:删除、重新创建)视图的情况下更改 table 的列

这在更改 table 时当然会更麻烦,但是这样您就不会在 table 更改后忘记调用 EXEC sp_refreshview 时出现运行时错误(例如专栏drop) 因为你也被数据库强制调整视图。