数据库项目发布失败,因为部署脚本试图删除并重新创建未修改的 table

Publish of Database Project fails because deployment script attempts to drop and re-create an unmodified table

我正在使用 Visual Studio 15.8.5 和 Sql Server Data Tools 15.1。

我创建了一个 SQL 服务器数据库项目并导入了一个现有数据库的架构。我对数据库的几个表做了一些小改动,并毫无问题地将更新发布到开发数据库。

在项目中添加了几个 SQL 脚本后,所有脚本都带有:

Build Action = None

发布失败,尽管项目的任何数据库对象都没有发生变化。

这是导致问题的自动生成的发布脚本的一部分:

/*
The table [lut].[KAE] is being dropped and re-created since all 
non-computed columns within the table have been redefined.
*/

IF EXISTS (select top 1 1 from [lut].[KAE])
    RAISERROR (N'Rows were detected. The schema update is terminating 
because data loss might occur.', 16, 127) WITH NOWAIT

GO
但是,

Table [lut].[KAE] 没有改变。其中一个脚本正在重新定义其架构,但这应该没有什么区别,因为这是一个 'No Build' 脚本。

我在这里可能做错了什么?

编辑:

我已经按照@MadBert 的建议进行了架构比较。我最初使用我的实际数据库作为 source 和我的 sql 服务器 visual studio 项目作为 target。没有发现差异。

然后我切换了源数据库和目标数据库并再次比较。检测到以下 'difference'。

如您所见,这并不是真正的差异,它看起来像是模式比较中的 Visual Studio 错误。关于如何规避此行为的任何想法?

SQL Server Database project 被设置为错误的 Target platform 时出现了类似的问题。在项目属性中编辑它以匹配目标服务器。通过右键单击项目和 select Schema Compare... 再次启动架构比较。

还要检查 Ignore whitespace 是否标记在 Schema Compare Options 中。如果您仍然以某种方式存在差异,请尝试将 Notepad++ 中的文本粘贴到 Show All Characters 上,看看您是否能发现差异。

如果您仍然找不到任何差异,请尝试从项目中创建一个新数据库并使用SSMS GUI 进行比较。 table 是否具有相同的锁定升级设置等?

事实证明,重构日志文件是罪魁祸首。

我试图发布到一个空数据库,正如@Ogglas 明智地建议的那样。我注意到在发布期间我收到了以下消息:

The following operation was generated from a refactoring log file 8e659d92-10bb-4ce9-xxxx-xxxxxxxxx Rename [lut].[KAE].[xxxxx] to $$$$$$$$$ Caution: Changing any part of an object name could break scripts and stored procedures.

然后我注意到我的 SQL 服务器数据库项目包含一个 .refactorlog 文件

似乎这个日志文件是在我更改了有问题的 table 模式之后生成的。 table 的架构后来恢复到其原始状态,但日志文件仍然存在。

我删除了这个日志文件,然后发布终于成功了!