【发布时间】:2015-05-14 16:01:20
【问题描述】:
我正在使用 SSDT 来保持 2 个数据库同步。
为此,我在 Server1 中有一个数据库,在 Server2 中有一个数据库,在我的项目中有一个 Schema。
我总是在 Server1 数据库中进行更改,并将这些更改应用到 Server2 数据库中。为此,我使用以下工作流程:
- 将 Server1 数据库与 Schema 进行比较,并使用 Server1 的更改更新 Schema
- 将 Schema 与 Server2 数据库进行比较,并将 Schema 中的更改更新到数据库中
这通常可以正常工作,但我在上次重命名表中的列时发现了一个问题。
通常,如果我重命名表中的列,则会将更改检测为列重命名,因此,当我将 Server1 与 Schema 进行比较时,可以正确检测到列重命名,并且我可以安全地完成工作流程。
但是,我上次在 Server1 中重命名表中的列时,将其与架构进行比较时,它没有将更改检测为列重命名,而是将更改检测为删除列(使用旧名称)并创建列(使用新名称)。显然,如果我在 Server2 数据库中应用这些更改,我将丢失重命名列中的所有数据。
SSDT 中有这种行为的原因吗?我可以指示 SSDT 了解这是列重命名吗?
我知道如何手工完成,但我希望在 SSDT 中避免这个问题,或者如果以后再次出现,我能够解决它。
【问题讨论】:
-
如果您将项目与数据库进行比较,是否有任何其他属性显示为不同?有时会出现您看不到的细微差别,但足以触发删除/重新创建。此外,检查“refactorlog”文件以查看其中是否有用于重命名列的条目。如果没有,则可能需要创建它。最简单的方法是重命名,然后重新命名 - 删除额外的重命名,你应该会很好。
标签: sql-server-2012 sql-server-data-tools