如何在 SSDT 中刷新视图的列?

How do I refresh the columns of a view in SSDT?

我在尝试部署 SQL 服务器数据工具 (SSDT) 数据库项目时遇到此错误:

View or function 'dbo.Employees' has more column names specified than columns defined.

我从底层 table 中删除了一列,视图如下所示:

CREATE VIEW [dbo].[Employees] AS SELECT * FROM [$(ExternalDB)].[dbo].[Employees];

执行 Google 搜索会返回 this page,它表示 SQL 服务器在必须刷新的视图上保留元数据。他们提到这个命令:

EXEC sp_refreshview 'Employees';

如果我将其放入预部署脚本中,它将 运行 在删除该列之前。如果我将它放在 post-部署脚本中,部署将在执行之前抛出错误。所以我的问题是我可以在哪里或如何使用 SSDT 项目

这很有趣,因为默认情况下 ssdt 将刷新任何依赖于任何 table 作为部署的一部分发生更改的视图。

列是否作为正常 ssdt 部署的一部分被删除?

在您的发布配置文件或发布选项中,您是否将 ScriptRefreshModule 设置为 false?

除此之外 select * 在视图中是不好的做法,放入完整的列列表,这个问题就消失了,您甚至可以右键单击 "select *" 并选择展开以获得完整的列列表 - 改为这样做 :) 埃德