【问题标题】:The database cannot be opened because it is version 851. This server supports version 782 and earlier. A downgrade path is not supported无法打开数据库,因为它是 851 版本。此服务器支持版本 782 及更早版本。不支持降级路径
【发布时间】:2016-08-25 09:48:42
【问题描述】:

我正在尝试在 SQL Server 中附加数据库文件。我收到以下错误。尝试从 Visual Studio 附加数据库时遇到相同的错误。我正在使用 Visual Studio 2013 和 SQL Server 2014 Management Studio。

我的连接字符串:

<add name="Sample"  
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\M\Desktop\SampleApplication1\App_Data\Sample.mdf;Initial Catalog=SampleDBContext;Integrated Security=True;" 
     providerName="System.Data.SqlClient"/>

错误:

无法打开数据库“sample”,因为它是 851 版。此服务器支持 782 版及更早版本。不支持降级路径。无法打开新数据库“示例”。 CREATE DATABASE 已中止。

这是在 Visual Studio 中设置的默认 SQL Server 实例。

【问题讨论】:

标签: sql-server visual-studio-2013 sql-server-2014


【解决方案1】:

您不能这样做 - 您不能将数据库从 较新版本的 SQL Server 附加/分离或备份/恢复到 较旧版本 - 内部文件结构差异太大,无法支持向后兼容性。显然,您的数据库来自 SQL Server 2016 预发行版(内部版本:852),而您尝试将其附加到的引擎是 SQL Server 2014(内部版本:782)。

您可以通过以下方式解决此问题

  • 在所有机器上使用相同版本的 SQL Server - 然后您可以轻松地在实例之间备份/恢复数据库

  • 否则,您可以在 SQL Server Management Studio (Tasks &gt; Generate Scripts) 或使用第三方工具

  • 或者您可以使用 Red-Gate 的 SQL Compare 和 SQL Data Compare 等第三方工具在源和目标之间进行“差异化”,根据这些差异生成更新脚本,然后在目标平台;这适用于不同的 SQL Server 版本。

【讨论】:

  • +1,我将尝试按照您在第二点中的建议生成数据库脚本,而不是附加此数据库。实际上这个数据库是在 godaddy 服务器上创建的。谢谢 marc_s。
  • 你如何更新这个,为什么它在机器上有所不同?我所做的只是在两台机器上安装 vs2015。
【解决方案2】:

我在关注旧的Pluralsight MVC4 tutorial 时遇到了这个问题。

课程要求我使用 v11.0,但我运行的是 2015 版本。我打开了 SQL Server 对象资源管理器并查看了不同版本的 LocalDB,并抓住了其中包含我的数据库的版本的名称(右键单击“重命名”)。

然后,我将名称粘贴到“添加连接”窗口中的“服务器名称”下。单击刷新,瞧,就在那里。希望这对那里的任何人都有帮助。

【讨论】:

    【解决方案3】:

    如果您仍在运行 Visual Studio 2015 并看到此错误,此 Microsoft link 可能会解决您的问题 - 上面的答案是答案的一部分。 (megamaiku)假设您安装/访问数据库没有问题,Mark_S 的“生成脚本”答案将起作用。如果我记得 SQL 比较相当昂贵,但这是一个很好的解决方案,再次假设您可以挂载由 Visual Studio 应用程序创建的数据库。
    Visual Studio 2017 和 SQL Server 2017 也会出现类似的问题,只是您将 852/856 视为版本问题。

    移动数据库后,更改您的 web.config 连接字符串以匹配您的服务器; (localdb)\MSSQLLocalDB 或可能是 localhost,具体取决于您正在运行的内容 (SQL 2016/2017/2019)。

    <add name="DefaultConnection"
         connectionString="Data Source=(localdb)\MSSQLLocalDB;myDB.mdf;Initial Catalog=MyDBName;Integrated Security=True"
         providerName="System.Data.SqlClient"/>
    

    或

    <add name="DefaultConnection"
         connectionString="Data Source=localhost;myDB.mdf;Initial Catalog=MyDBName;Integrated Security=True"
         providerName="System.Data.SqlClient"/>
    

    一篇旧文章解释了如何一次一个地从数据库中提取各个部分,如果幸运并且它仍然有效(十年前曾经做过 - 分开然后将部分重新组合在一起),您也许可以得到你需要的 - 一个更新的版本恢复到一个旧的版本。我无法找到该技巧的参考,但不是编写整个数据库的脚本,有一种方法可以通过恢复标头(仅恢复标头)来恢复,然后一旦标头在您的服务器上就位并且权限等等匹配,您可以从较新的备份中恢复该数据库。
    但是,生成脚本不那么复杂,更受欢迎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2020-06-26
      • 2013-07-20
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多