正 文:

    我们在调试网站数据的时候,往往需要在不同版本的sql之间转换,比如sql2000到sql2005/sql2008之间的互相转换。微软的SQL是高版本向低版本兼容,因此,在SQL2005中可以直接附加sql2000的数据库文件。但是,反过来就有一定难度了。

    由于SQL Server 2005的数据格式变化很大,无法直接将SQL 2005的备份文件直接还原到SQL Server 2000中。但是可以通过数据导入导出向导或者SSIS包进行数据传输。 

    大概的操作过程:为了避免类型信息的丢失,建议先在SQL SERVER 2005 Management Studio里面通过Generate Script产生数据库表,视图,存储过程等对象的脚本,然后在SQL Server 2000中创建一个数据库,并执行该脚本文件,创建对象的schema。在这项工作完成以后,再通过SQL Server 2005提供的数据导入导出向导(右键点击数据库->任务->导入/导出)进行数据传输。 

    SQL 2005转到SQL 2000的详细的方法步骤:

1. 生成for 2000版本的数据库脚本 
打开SQL SERVER 2005 Management Studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例 
-- 右键要转到2000的库 
-- 任务 
-- 生成脚本 
-- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库 
-- 勾选"为所选数据库中的所有对象编写脚本" 
-- 在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000" 
-- 其他选项根据需要设置 
-- 最后把脚本保存到一个 tmp.sql 脚本文件 

2. 在SQL 2000中创建目标数据库 
连接到SQL Server 2000,选择导入的数据库,打开查询分析器,执行上面生成的脚本tmp.sql,以创建一个新的数据库。这里仅仅是创建了数据库表的结构而已,还没有数据。 

飘易提醒:这里打开tmp.sql脚本后,需要修改下默认的用户,飘易截取下开头的两句:

IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'user103987877')
EXEC dbo.sp_grantdbaccess @loginame = N'user103987877', @name_in_db = N'user103987877'
GO

上面语句里的“user103987877”需要修改成sql 2000上存在的用户名,不能使用保留名如“sa”。

3. 将数据从2005导到2000 
打开 SQL2005 Management Studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例 
-- 右键要转到2000的库 
-- 任务 
-- 导出数据 
-- 在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数据库 
-- 在"选择目标"步骤中, 连接到sql 2000, 并选择步骤2新建的库 
-- 在"选择源表和源视图"中, 选择所有的表 
-- 最后完成 

sql server低版本备份还原到高版本数据库 sql2005备份还原到sql2012_数据库

   补充一点:在从sql 2005导出数据到sql2000的时候可能会提示:无法在只读列“id”中插入数据!
   解决办法
因为id是标识列,所以导入时没办法插入数据库。我们只需要在导入/导出第二步骤选择“源表和源视图”的时候,点击后面的“编辑映射”按钮,然后勾选“启用标识列插入”再导入即可。