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

时间:2018-11-23 16:29:39

标签: sql-server visual-studio sql-server-data-tools

我正在将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项目用作目标。没有发现差异。

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

enter image description here

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

2 个答案:

答案 0 :(得分:6)

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

按照@Ogglas的明智建议,我试图将其发布到一个空数据库。我注意到在发布期间我收到以下消息:

  

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

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

enter image description here

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

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

答案 1 :(得分:3)

在将SQL Server Database project设置为错误的Target platform时遇到了类似的问题。在项目属性中进行编辑以匹配目标服务器。通过右键单击项目并选择Schema Compare...再次启动模式比较。

enter image description here

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

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

enter image description here