为啥我的数据库项目升级脚本包括从引用的数据库项目中重构?

Posted

技术标签:

【中文标题】为啥我的数据库项目升级脚本包括从引用的数据库项目中重构?【英文标题】:Why is my database project upgrade script including refactoring from referenced database projects?为什么我的数据库项目升级脚本包括从引用的数据库项目中重构? 【发布时间】:2014-06-25 13:16:25 【问题描述】:

希望这会有意义..

我们有很多数据库项目,用于维护架构和生成升级脚本。为了生成升级脚本,我们使用自动构建引擎,该引擎使用 SqlPackage.exe 将数据库项目与“模式模板”进行比较,“模式模板”是实时数据库的副本,但没有数据。

其中一个数据库引用了其他三个数据库项目。

最近,我们发现在为该数据库项目生成升级脚本时,它包括重构参考项目之一中的表的 SQL,而不是相关项目中的表。

所以升级脚本包含两段SQL:

    在开头打印语句,说明架构对象不会被重命名。 一堆插入语句到 __RefactorLog。

问题是双重的:

    这些重构不应包含在此升级脚本中;它们属于引用的数据库项目之一 - 它们与这个无关。 因为这个数据库不需要重构,所以它没有名为 __RefactorLog 的表,因为升级脚本不需要创建它。这会导致构建失败。

我查看了数据库项目设置,看不出引用数据库项目中的重构会包含在引用项目中的任何原因。

有什么想法吗?

更新 - 缺少的 __RefactorLog 表是一个红鲱鱼。由于某种原因,它包含在模式模板中,但不在实时数据库中,因此 SqlPackage 假定它不需要创建它。但是,我仍然很想知道为什么来自引用数据库项目的所有重构都包含在有问题的项目中。

【问题讨论】:

【参考方案1】:

这是 SSDT 中的一个错误 - 有一个 Connect bug 跟踪此问题。请注意,对于“相同数据库”引用,重构日志应该被包括在内。这是因为所有对象都将被推送到一个数据库。错误是“不同数据库”引用的重构日志包含不正确,我猜这就是您遇到的问题。

【讨论】:

谢谢凯文 - 这正是它的样子。

以上是关于为啥我的数据库项目升级脚本包括从引用的数据库项目中重构?的主要内容,如果未能解决你的问题,请参考以下文章

打开access出现数据库或项目包含一个对文件“FPDTC.DLL版本1.丢失或损坏的引用”为啥?

从脚本访问 BigQuery 保存的项目查询

为啥我的上传目录相对于项目目录,但 Django 试图从与应用程序相关的路径中获取它?

如果无法识别引用,则使用Microsoft.NET.Sdk.Razor时发布失败,但构建工作正常

为啥我不能引用将惯性js添加到我的项目的应用程序布局文件?

为啥我不能引用我的类库?