而不是列重命名,项目执行列删除和列添加

Jot*_*aBe 10 sql-server-2012 sql-server-data-tools

我正在使用SSDT来保持2个数据库同步.

为此,我在Server1中有一个数据库,在Server2中有一个数据库,在我的项目中有一个Schema.

我总是在Server1数据库中进行更改,并在Server2数据库中应用这些更改.为此,我使用此工作流程:

  • 将Server1数据库与Schema进行比较,并使用Server1更改更新Schema
  • 将Schema与Server2数据库进行比较,并将Schema中的更改更新到数据库

这通常工作正常,但我上次重命名表中的列时发现了一个问题.

通常,如果我重命名表中的列,则更改将作为列重命名检测,因此,当我将Server1与Schema进行比较时,会正确检测列重命名,并且我可以安全地完成工作流程.

但是,我最后一次在Server1中的表中重命名列时,将其与Schema进行比较,而不是将更改检测为列重命名时,它已将检测到的更改为删除列(使用旧名称)并创建列(用新名字).显然,如果我在Server2数据库中应用这些更改,我将丢失重命名列中的所有数据.

在SSDT中有这种行为的原因吗?我可以指示SSDT了解这是一个列重命名吗?

我知道如何手动完成,但我宁愿在SSDT中避免这个问题,或者如果将来再次出现,我也可以解决它.

sca*_*r80 13

我认为有一些误解.您已在真实数据库上进行了列重命名,现在您想要进行模式比较,以便将列重命名从数据库传播到SSDT项目.它不会以这种方式工作,因为SSDT无法检测到列实际上已重命名.

正确的方案是首先在SSDT中重命名一个列(右键单击列 - > Refactor - > Rename.将创建一个refactorlog文件 - 您不能删除它.).然后在项目和目标数据库之间进行模式比较.更改将作为列重命名传播到服务器.


Ed *_*ott 6

您是否使用了重构--> 重命名菜单选项?这就是如何将它包含在内,如果你这样做了但它不起作用,那么我会在连接上提交一个错误。

要手动将其放入,或者手动将其重命名,然后使用重构菜单或检查 refactorlog.xml,手动添加条目非常容易。

让我们知道发生了什么/你决定做什么!