最近在使用SQL Server过程中,需要将SQL Server2008的数据还原到SQL Server2005中,结果发现按照传统的方法直接还原是行不通的,2008能够还原2005的备份文件,但2005却不能还原2008的文件。
上网查了很多资料,有如下方法:
1、先在2008中将源数据库生成为脚本文件“*.sql”;
2、在2005中执行该脚本文件“*.sql”,可以生成源数据库中所有的表、视图、存储过程;
3、将2008作为服务器端,2005作为客户端;
4、在2008中,对源数据库执行“数据导出”(2005Express貌似不能使用这项功能,这也是这种方法的不足),将源数据库所有表的数据导出客户端2005相应的表中(视图也没有必要导,因为视图的数据是由基表拼成的)。此时有两点需要注意:第一、在选择源数据库中的表时需要选择“启用标识插入”,否则会出现只读列无法修改的错误;第二、如果存在外键约束,需要注意表的导出顺序,主表要先导出,然后再导出从表,否则会报Foreign Key的错误;
5、如此便可将2008中的数据库导入2005中。
但是用上述方法有几点缺陷:
1、需要建立网络将2008和2005两个数据库连接起来,如果数据库不在一台电脑上,配置过程比较繁琐;
2、在导出数据时由于外键约束的存在,需要判断表的主从关系,如果数据库中的表较多,要完成这个工作是十分麻烦的,并且极有可能漏掉某几张表的数据;
3、在执行上诉步骤后发现一个致命的问题,源数据库中的触发器并没有被还原。
鉴于上述缺陷的存在,又仔细研究了上述方法,发现原来这个问题可以非常简单的解决,方法如下:
1、首先,仍然在2008中将源数据库生成为脚本文件“*.sql”,但是此时要注意,不要使用默认的脚本选项,此处应该将“编写触发器脚本”、“编写数据的脚本”等相关选项设置为TRUE;
2、在2005中执行该脚本文件“*.sql”,可以生成源数据库中所有的表、视图、存储过程、触发器以及数据。
3、此时,可以完美的将2008数据库在2005中还原。
该方法简便易行,可以很好的解决SQL Server2008 数据库文件还原至 SQL Server2005 中。