如何将SQL Server 2012的数据库备份文件(.bak)恢复到SQL Server 2008 Express中?

24
一份最初来自于SQL Server 2008的数据库已经被恢复到了SQL Server 2012。从SQL Server 2012备份了一个文件,现在正在尝试将其还原到本地的SQL Server 2008 Express中。但是出现了“指定的转换无效”(SQLManagerUI)的错误。
我已经生成了一个SQL脚本,设置兼容于SQL Server 2008,并且脚本很大,大约有700MB。
我记得以前曾经尝试在我的SQLExpress上运行那么大的脚本,也遇到了错误。
有没有办法将“大型”的SQL Server 2012数据库导入到SQL Server 2008 Express中?

5
在SQL Server中,你永远不能在版本上退回。如果你在2012版本中备份了数据库,那么你无法将该备份还原到2008版本中。这是无法解决的问题,没有任何技巧或方法可以规避这个问题,很遗憾。 - marc_s
哦,不。谢谢Marc。我会尝试运行生成的SQL脚本,以便将数据库副本复制到我的本地SQL Express中。 - stormwild
2
还可以在这里查看我的答案:https://dev59.com/12kv5IYBdhLWcg3w3Eal - Aaron Bertrand
即使兼容模式设置为 SQL 2005? - Juan
我遇到了完全相同的问题,最后使用了Redgate Sql Packager,构建了一个能够部署和在服务器上运行的.exe文件。它按预期安装了整个数据库。 - VilladsR
3个回答

22

3

在使用SSMS中的脚本向导脚本化大型数据库时,检查执行顺序并愿意手动重新排列非常重要。旧版本的SSMS存在这个问题,因为它们(可能)依赖于sp_depends存在缺陷

在这种情况下我发现非常有用的是像ApexSQL Diff这样的工具,您可以使用它读取数据库备份并生成按正确执行顺序排列的脚本。

SQL服务器低版本上的数据库备份还原

其中没有任何方法能够捕捉到Aaron提到的使用高版本特定函数的问题。


1
一个比使用SSMS脚本向导更好的选择是使用Codeplex上可用的类似工具,称为SQL数据库迁移向导-http://sqlazuremw.codeplex.com/releases/view/32334。您需要最新版本v4.x以与SQL Server 2012配合使用。
该工具最初旨在用于在SQL Server和Azure之间迁移数据库。但是,该工具在SQL Server和SQL Server之间同样有效。诀窍是在高级选项中设置目标为SQL Server而不是Azure。
之所以这比SSMS脚本向导更好的选项是它使用BCP进行数据传输,而不是TSQL,因此更加高效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接