如何在 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 *" 并选择展开以获得完整的列列表 - 改为这样做 :)
埃德
我在尝试部署 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 *" 并选择展开以获得完整的列列表 - 改为这样做 :) 埃德