正 文:
我们在调试网站数据的时候,往往需要在不同版本的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 2005导出数据到sql2000的时候可能会提示:无法在只读列“id”中插入数据!
解决办法:
因为id是标识列,所以导入时没办法插入数据库。我们只需要在导入/导出第二步骤选择“源表和源视图”的时候,点击后面的“编辑映射”按钮,然后勾选“启用标识列插入”再导入即可。