如何将数据库备份文件(.bak)从SQL Server 2012还原到SQL Server 2008 Express?

时间:2012-05-25 10:56:40

标签: sql-server-2008-express sql-server-2012

最初来自SQL Server 2008的数据库已还原到SQL Server 2012.从SQL Server 2012进行了备份,我正在尝试在本地SQL Server 2008 Express上还原它。但是我收到错误'指定的强制转换无效'(SQLManagerUI)。

我已经从2012年生成了一个SQL脚本,并将其设置为与SQL Server 2008兼容生成。但它是一个大型的sql文件,大约700mb。

我记得之前我曾尝试在我的本地SQLExpress上运行那个大小的脚本,但也出错了。

有没有办法让SQL Server 2012中的“大型”数据库进入SQL Server 2008 Express?

3 个答案:

答案 0 :(得分:21)

感谢Marc和Aaron提供答案。

快速回答是否定的,无法将备份文件从较高版本还原到较低版本的SQL Server。

解决方法是生成脚本以创建数据库。

您可以将脚本生成定位到较低版本。

请参阅上面的评论以获取更多信息。

链接:

Why an SQL Server Database from a higher version cannot be restored onto a lower version of SQL Server?

Create Database in SQL Server 2012, Script and Use in 2008?

答案 1 :(得分:3)

添加一些可能对人们有帮助的事情

在SSMS中使用脚本向导编写大型数据库脚本时,检查执行顺序并愿意手动重新排列是非常重要的。较旧版本的SSMS存在此问题,因为它们(可能)依赖于具有sp_dependsbug

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

SQL Server database backup restore on lower version

Aaron提到的关于使用特定于更高版本的函数的事情,没有一个方法可以捕获的东西。

答案 2 :(得分:1)

比使用SSMS脚本向导更好的选择是使用Codeplex上可用的类似工具SQL Database Migration Wizard - 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,因此效率更高。