gpt4 book ai didi

sql-server-2012 - 而不是列重命名项目执行列删除和列添加

转载 作者:行者123 更新时间:2023-12-04 03:11:11 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

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

    最佳答案

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

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

    关于sql-server-2012 - 而不是列重命名项目执行列删除和列添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241894/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com