【问题标题】:Update target button is disabled after schema comparison模式比较后更新目标按钮被禁用
【发布时间】:2013-07-19 09:29:39
【问题描述】:

我使用 VS 2012 创建了数据库项目。模式比较完成后,应该启用更新目标按钮以与目标同步。

但它没有被启用。任何帮助请。

我正在使用带有 sp 3、SQL Server 2012 的 VS 2012,

【问题讨论】:

标签: visual-studio-2012 database-project sql-server-2012-datatools


【解决方案1】:

如果有任何错误,请检查错误列表,我在VS中有一个无法识别的单词(但在SQL Server中有),我将其注释掉,重新比较并成功启用。

【讨论】:

  • 这是我的问题,永远记得检查错误列表窗口! :) 谢谢@FranciscoG
  • 确保项目设置中的目标版本是针对正确版本的SQL Server,那么就不应该出现无法识别的单词。
  • 注:似乎任何错误都会阻止更新按钮显示;即使它们位于您已从更新中排除的对象上。
  • 谢谢。我未能检查错误列表窗口。当我这样做时,我发现了一个错误,解决了它,重新比较,按钮不再被禁用。
  • @Matthew 可能您必须为 VS 更新 SQL Server 数据工具。 docs.microsoft.com/en-us/sql/ssdt/…
【解决方案2】:

查看是否有“警告”消息指出“由于内部错误而无法生成部署计划”。如果是这样,更新和生成脚本按钮将被禁用。

关闭 Visual Studio,导航到包含数据库项目的文件夹并删除所有 (*.dbmdl) 文件。然后重新启动 Visual Studio,重新运行比较架构,此时应启用更新按钮。

【讨论】:

  • 这不应该是正确的答案,但它是。谢谢!
  • 当存在无法更新的外部数据源或表时也会出现该警告,即使它们被排除在外。我的解决方法是创建一个新的临时项目,更新除外部之外的所有内容,然后将其与数据库进行比较。
【解决方案3】:

解决方法:

就我而言。修复错误不是优先任务。我也无法在错误列表中找到任何错误。

只是您不必在源或目标中使用“Visual Studio 数据库项目”。不要使用项目,而是使用您已经拥有的脚本创建一个临时数据库。

在源中选择这个(或这些)临时数据库和(或)在目标中选择其他。

按钮必须启用。

对我来说,获得差异远比解决问题重要。希望它可以帮助你。还有一些即兴创作。

【讨论】:

  • 这个有用的答案可以措辞更好,但是当您的数据库中有对其他数据库的引用并且因此产生错误时,它确实有效。 Prashant P 所说的不是将服务器上的数据库与解决方案中的数据库项目进行比较,而是可以使用解决方案中的数据库项目来创建数据库(我在本地 sql server 实例上创建它),然后比较两者数据库。
  • 是的,但在这种情况下,如果您真正需要的只是比较,那么您并不需要激活“更新”按钮。
  • @KarmaEDV 是的,但这部分有点学术,因为如果您确实需要更新,答案仍然有帮助。还有这样的错误,谁知道比较是否可以依赖。在我的情况下,我确实需要更新,并且通过将“合理”备份恢复到我的本地服务器并首先运行两个数据库之间的比较,我设法绕过了模式比较错误并启用了更新按钮。应用该更新后,问题得到解决,我可以按照最初的预期从项目中进行比较和更新。结果!
【解决方案4】:

您的数据库项目似乎有没有默认值的 sqlcmd 变量。

见: http://www.andrewburrow.net/vs2012-schema-compare-buttons-disabled/

希望这会有所帮助。

【讨论】:

  • 它帮助了我。谢谢!
【解决方案5】:

我在错误列表中看不到任何错误,但我可以在输出选项卡中看到错误

【讨论】:

  • 是的,这个常见问题,但 Visual Studio 不会抛出消息,无论如何肯定是更新目标按钮保持禁用的原因
【解决方案6】:

每次打开“模式比较”上的“选项”时,您必须再次单击“比较”按钮以激活“更新”按钮。但是,如果第一次不起作用,只需关闭并重新打开 Schema 比较文件即可。

【讨论】:

    【解决方案7】:

    对我来说,错误列表中没有可见的错误。这是因为我将“生成的显示问题”下拉菜单设置为“仅构建”;将其更改为“Build + IntelliSense”让我可以看到需要修复以启用“生成脚本”和“更新”按钮的 SQL 错误。

    【讨论】:

      【解决方案8】:

      在 SSDT 中,我遇到了启用更新按钮但未启用生成脚本的情况。这是因为我的目标架构是我的本地解决方案(*.sqlproj 与项目)。

      我花了几分钟才明白,目的地需要是一个真正的数据库才能正确生成脚本。

      【讨论】:

        【解决方案9】:

        毕竟,当您拥有可用的 Update Target 按钮和禁用的 Generate Script 按钮时。

        看看你的源是数据库,你的目标是你的 SSDT 项目。

        如果是,请单击“切换源和目标”按钮。

        生成脚本按钮将变为可用。
        IE。 SSDT 项目必须是源,数据库必须是模式比较窗口中的目标。

        【讨论】:

          【解决方案10】:

          解决方法 2:

          在我的例子中,更新按钮是灰色的,因为有关于我之前创建并添加到项目中的视图的错误警告。 问题是视图被编写为使用完整的数据库限定对象命名。例如。 [databasename].[schemaname].[objectname],在 SSMS 中运行良好,但在数据库项目中检查时会出现问题。 如果您使用三部分命名来引用同一数据库项目中的对象,则会导致 Visual Studio 中出现错误/警告。

          通过将视图定义中的代码更改为 [schemaname].[objectname],删除了错误警告并启用了更新选项。快乐的时光!

          学分: https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/3577074-allow-three-part-naming-for-referring-a-db-object

          https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/17396128-keep-update-and-generate-update-script-buttons

          【讨论】:

            【解决方案11】:

            通常情况下,当数据库对象在数据库项目中物理上的单独 sql 文件中可用但不包含在数据库项目本身中时,更新按钮会显示为灰色。我只是将这些 sql 脚本添加到项目中,并在比较架构后启用了更新按钮。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多