1

希望这会有意义..

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

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

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

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

  1. 在开始时打印语句说模式对象不会被重命名。
  2. 一堆插入语句到 __RefactorLog。

问题是双重的:

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

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

有任何想法吗?

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

4

1 回答 1

2

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

于 2014-06-25T18:13:38.087 回答