首页 > 解决方案 > 发布数据库项目失败,因为部署脚本尝试删除并重新创建未修改的表

问题描述

我将 Visual Studio 15.8.5 与 Sql Server Data Tools 15.1 一起使用。

我创建了一个 SQL Server 数据库项目并导入了现有数据库的架构。我对数据库的几个表进行了一些小的更改,并将更新发布到开发数据库中,没有任何问题。

在项目中添加一些 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

不过,表[lut].[KAE]并没有改变。其中一个脚本正在重新定义其架构,但这应该没有什么区别,因为这是一个“无构建”脚本。

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

编辑:

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

然后我切换源数据库和目标数据库并再次进行比较。检测到以下“差异”。

在此处输入图像描述

如您所见,这不是实际差异,它看起来像是架构比较中的 Visual Studio 错误。关于如何规避这种行为的任何想法?

标签: sql-servervisual-studiosql-server-data-tools

解决方案


原来,重构日志文件是罪魁祸首。

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

以下操作是从重构日志文件 8e659d92-10bb-4ce9-xxxx-xxxxxxxxx 将 [lut].[KAE].[xxxxx] 重命名为 $$$$$$$$$ 警告:更改对象名称的任何部分可能会破坏脚本和存储过程。

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

在此处输入图像描述

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

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


推荐阅读