我正在使用SSDT来保持2个数据库同步。
为此,我在Server1中有一个数据库,在Server2中有一个数据库,在我的项目中有一个Schema。
我总是在Server1数据库中进行更改,并在Server2数据库中应用这些更改。为此,我使用此工作流程:
这通常可以正常工作,但我上次在表格中重命名列时发现了一个问题。
通常,如果我重命名表中的列,则将更改视为列重命名,因此,当我将Server1与Schema进行比较时,会正确检测列重命名,并且我可以安全地完成工作流程。 / p>
但是,我最后一次在Server1中的表中重命名列时,将它与Schema进行比较,而不是将更改检测为列重命名时,它已将检测到的更改为删除列(具有旧名称)并创建列(使用新名称)。显然,如果我在Server2数据库中应用这些更改,我将丢失重命名列中的所有数据。
SSDT中有这种行为的原因吗?我可以指示SSDT了解这是一个列重命名吗?
我知道如何手动完成,但我宁愿在SSDT中避免这个问题,或者能够解决它,如果它将来再次出现。
答案 0 :(得分:12)
我认为存在一些误解。您已在真实数据库上进行了列重命名,现在您想要进行模式比较,以便将列重命名从数据库传播到SSDT项目。 它不会以这种方式工作,因为SSDT无法检测到列实际上已重命名。
正确的方案是首先重命名SSDT中的列(右键单击列 - >重构 - >重命名。将创建一个重构日志文件 - 您不能删除它。)。然后在项目和目标数据库之间进行模式比较。更改将以列重命名的形式传播到服务器。
答案 1 :(得分:4)
您是否使用了重构 - >重命名菜单选项?这就是如何将它包括在内,如果你这样做并且它不起作用那么我会在连接上提交一个bug。
要手动将其重命名,请使用重构菜单或检入refactorlog.xml,手动添加条目非常容易。
让我们知道您决定做了什么!