而不是列重命名项目做列删除和列添加

Instead of column rename the project does column drop and column add

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

为此,我在 Server1 中有一个数据库,在 Server2 中有一个数据库,在我的项目中有一个架构。

我总是在 Server1 数据库中进行更改,然后在 Server2 数据库中应用这些更改。为此,我使用以下工作流程:

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

通常,如果我重命名 table 中的列,则更改被检测为列重命名,因此,当我将 Server1 与架构进行比较时,列重命名被正确检测到,我可以安全地完成我的工作流程。

但是,我上次重命名 Server1 中 table 中的列时,将其与架构进行比较时,它没有将更改检测为列重命名,而是将更改检测为删除列(旧名称)和创建列(新名称)。显然,如果我在 Server2 数据库中应用这些更改,我将丢失重命名列中的所有数据。

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

我知道如何手工完成,但我更愿意在 SSDT 中避免这个问题,或者能够解决它,如果它在未来再次出现。

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

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

让我们知道 happened/you 决定做什么!

我觉得有些误会。您已对真实数据库进行了列重命名,现在您想要进行架构比较以将列重命名从数据库传播到 SSDT 项目。 它不会以这种方式工作,因为 SSDT 无法检测到该列实际上已重命名。

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

我知道这是一个老问题,只是想为那些仍在寻找这个问题并且不知道如何执行重构步骤的人澄清一下。

在 Visual Studio 的设计视图中,单击要更改的列名称,然后单击顶部 Visual studio 菜单中的“SQL”选项。然后点击“重构”>“重命名”: Image with the menu option highlighted

接下来,您可以在解决方案资源管理器中右键单击项目本身 window,然后选择“架构比较...”选项。