【问题标题】:Can't update with schema compare无法使用架构比较进行更新
【发布时间】:2013-06-06 17:54:46
【问题描述】:

直到今天,我都能使用 Visual Studio 2012 中的架构比较功能从数据库项目更新数据库。但是现在,对于一个项目,我可以进行比较,但更新按钮是灰色的。

我可以使用其他项目来更新其他数据库,但是从这个项目中我无法更新任何数据库。我没有收到任何错误,只是功能不可用。

使用发布仍然有效。也可以从数据库更新项目,而不是相反。

有人知道为什么我无法通过 Schema Compare 更新数据库吗?

【问题讨论】:

标签: sql-server visual-studio-2012 schema-compare


【解决方案1】:

比较后检查屏幕底部,那里会显示状态消息。 如果数据库项目中存在编译错误,我已经看到了这个问题。解决错误后,关闭并重新打开比较对话框。重新运行比较,更新按钮应该再次可用。

【讨论】:

  • 如果“更新”按钮不可用,这很可能是这种情况。我解决了错误,按钮再次出现。谢谢!
  • 你先生应该得到一块饼干。这并不总是可见的(因为有时错误列表窗口被另一个窗口/选项卡隐藏),请继续检查它。不过,我希望 VS 警告用户这件事……
【解决方案2】:

您必须检查数据库用户和数据库架构。通常,如果数据库用户未在 DB Project 中正确复制,则 Schema Compare 不起作用。

【讨论】:

  • 尤其是即使数据库项目是从数据库中新导入的,也会发生这种情况。此外,就我而言,我可以点击更新,它不会做任何事情。 VS 2015 和 2017 中的行为相同。
  • 一旦我添加了 Schema,它就对我有用。输出窗口中没有错误消息或任何有效输出暗示这将是问题。
【解决方案3】:

对我来说,错误列表窗格和输出窗格在 Visual Studio 2015 中没有显示任何内容。只有在构建了我所针对的数据库项目之后,我才能在输出窗格中看到错误(但仍然没有在错误列表窗格)。修复这些错误后,更新按钮不再灰显。

【讨论】:

    【解决方案4】:

    我自己也遇到了同样的问题。如上所述,正常的 Visual Studio 错误列表会列出阻止更新的错误……但此外,还会有警告。默认启用的选项之一是数据丢失会阻止更新。那就是问题所在。尽管这只是一个警告条件,但除非您更改此标志,否则任何可能的数据丢失在功能上都是错误。

    恕我直言,这对 MS 来说是一个非常严重的 UI 故障,但你打算怎么办?

    【讨论】:

      【解决方案5】:

      对我有用的是包含架构。 我选择只包含某些表/过程等。 如果包含表和过程的架构也未勾选,则导入不包括元素。

      【讨论】:

      • 包括什么架构在哪里?
      【解决方案6】:

      您需要确保所有 SQLCMD 变量都有默认值。

      在解决方案资源管理器中右键单击项目并选择属性。

      在左侧的选项卡上,转到 SQLCMD 变量并在提供的列中输入默认值。

      再次运行架构比较后,更新按钮现在应该可用了。

      【讨论】:

        【解决方案7】:

        就我而言,问题在于我安装了更新版本的 SQL Server 和 SSMS (2016)。您必须始终确保安装了正确版本的 Sql Server Data Tools 以匹配您正在比较的版本。这是我使用 Visual Studio 2017 验证的适用于 SQL Server 2005-2017 的 SSDT 的链接:

        https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017

        【讨论】:

          【解决方案8】:

          对我来说,我更改了添加表格的顺序。如果任何两个表之间存在任何关系,则必须将父表添加到数据库中,然后将依赖表添加到数据库中。

          【讨论】:

            【解决方案9】:

            架构不仅必须在您的数据库项目中,而且如果数据库发生更改,它必须保持最新。在 DBA 在我的项目中的架构上授予数据库中新 sql 登录的 exec 权限后,更新停止工作。在将任何存储过程更改应用于我的项目的多次失败后,我更新了项目,只选择了已更改的架构。更新数据库项目中的模式后,更新再次开始工作。我在所有更新中都包含架构。希望这会有所帮助。

            【讨论】:

              【解决方案10】:

              在架构比较中转到选项 -> 常规 -> 检查*Ignore authorizer*

              【讨论】:

              • 这个功能有什么用?
              猜你喜欢
              • 2020-03-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-02-14
              • 1970-01-01
              • 2020-02-13
              • 2020-03-02
              相关资源
              最近更新 更多