转载至:http://chensyabc.blog.163.com/blog/static/10014285201010465943208/
参考2:http://www.cnblogs.com/tjsquall/archive/2007/12/21/1008258.html
我实际转换中有些折腾,特记录于此。
=================转载开始=====
2005建的数据库要在2000的数据库上使用,由于不向上兼容,导致各种问题,已经头疼三天了,今天终于解决了,解决方案如下:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先,附加的时候会碰到这样的问题:
错误602 未能在 sysindexes 中找到数据库 ID 12 中对象 ID 1 的索引 ID 1 对应的行。请对 sysindexes 运行 DBCC CHECKTABLE。
于是乎很郁闷。
(插一段片头话,如果一台电脑上有2000另外也有2005,应该也是可以完成的,但是希望各位安装2005的开发版,企业版很可能安装不了服务器组件,也就无法建立兼容性为90的数据库)
到网络上查找了方法:
因为数据库附加到2005的时候, 数据库文件已经自动升级到2005, 所以在2000下是无法再附加的(没有向上兼容的)直接restore或附加是不行的, 用脚本+导数据肯定没有问题。 2005转到2000的步骤步骤 1. 生成for 2000版本的数据库脚本 2005 的manger studio -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例 -- 右键要转到2000的库 -- 任务 -- 生成脚本 -- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库 -- 勾选"为所选数据库中的所有对象编写脚本" -- 在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000" -- 其他选项根据需要设置 -- 最后把脚本保存到一个 .sql 脚本文件 2. 在2000中创建目标数据库 在查询分析器(或2005的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库 --created by o07-csy 3. 将数据从2005导到2000 2005 的manger studio -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例 -- 右键要转到2000的库 -- 任务 -- 导出数据 -- 在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数 据库 -- 在"选择目标"步骤中, 连接到 2000, 并选择步骤2新建的库 -- 在"选择源表和源视图"中, 选择所有的表 -- 最后完成
(在这中间分析下这个解决办法的精妙和未考虑到的一些问题:
首先不得不承认它的思想能够解决这样的问题,既然不能直接附加,那就一点一点,凑成它,分成建数据库和转移数据。但是,中间应该分析的问题是,从2005生成的脚本是不是肯定能在2000中运行,因为不能附加就是因为2005和2000的差异。中间,出现varchar(max)的创建失败,因为其在2005后才有的;另一个问题就是自增,如果单纯的A,B,C表,没有自增,没有外键,这是这种方法肯定能解决的,然而数据库必然存在这些,所以有会出现两种错误,自增的列为只读的,外键决定了先后恢复数据的顺序
)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
很欣慰地找到这个方法,很开心,实践它,但是又遇到一个错误,就是在生成脚本的时候出现了错误:
目标服务器版本不支持该对象或该对象的一个属性。
继续找解决方案:
只要在数据的属性中设置兼容级别为 Sql Server 2000(80)即可
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
生成成功了,在打开执行的时候又遇到一个问题:
“max”附近有语法错误
原来varchar(max)是2005数据库后才有的,2000自然不认识,找解决方案:
把生成的SQL脚本打开,批量的把[varchar](max)替换成[varchar](4000),或者把[varchar](max)替换成[nvarchar](8000),双或者把[varchar](max)替换成[text]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
好了,创建成功了表,接下去到了导出数据了按照步骤,一切都选好了,到完成,出现错误:
- 执行之前 (错误)
消息
·错误 0xc0202009: 数据流任务: 出现 OLE DB 错误。错误代码: 0x80040E21。 已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80040E21 说明:“多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。”。 (SQL Server 导入和导出向导)
·错误 0xc0202025: 数据流任务: 无法创建 OLE DB 取值函数。请查看列元数据是否有效。 (SQL Server 导入和导出向导)
错误 0xc004701a: 数据流任务: 组件“目标 - IPConfig”(28) 在执行前阶段失败,返回的错误代码为 0xC0202025。 (SQL Server 导入和导出向导)
继续查找原因,最后分析出来, 原来还是那个varchar(max),从varchar(max)到varchar(4000)依然没用,存在错误。
解决方法:
将2005数据库中的varchar(max)都改为var(4000)
我是这样解决的,将源的字段类型改为varchar 导出的脚本也改为varchar 并可避免此错误
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
哈哈,终于看到复制了多少多少数据,等等,又打×了,晕晕晕晕晕,看看错误:
A表说B表的那一列怎么怎么样
自己想解决方法,新建视图,全部表格添加进去,看外键连接,然后按照顺序导数据,好了,大功告成!!!!!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
整理下终极解决方案,还是以脚本和数据一个一个来为主导思想:
1,在2005 Management Studio中
右击转换的数据库,“属性”,将兼容级别为 Sql Server 2000(80),
2,在2005 Management Studio中
--"任务"-->"生成脚本"
-- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库
-- 勾选"为所选数据库中的所有对象编写脚本"
-- 在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000"
-- 其他选项根据需要设置
-- 最后把脚本保存到一个 .sql 脚本文件
3,在2005 Management Studio中
使用2005 management studio连接到2000实例(可以本地以及远程),在实例中创建同名数据库,然后打开上面生成的脚本,将其中的[varchar](max)批量替换成[varchar](4000),执行,这样就创建好了各个表
4,在2005 Management Studio中
将原2005数据库中的各表列属性为varchar(max)的转换为varchar(4000),然后新建视图,查看各表的外键关系,按照顺序来导出数据(顺序如何决定不用我说吧,这都不会那就……
5,在2005 的Management Studio中
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库-->"任务"-->"导出数据"
-- 在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数据库
-- 在"选择目标"步骤中, 连接到2000, 并选择步骤2新建的库
-- 在"选择源表和源视图"中, 选择所有的表,并且将有ID为标识的表点击后面的编辑,勾选插入标识
-- 在"选择源表和源视图"中, 选择所有的表,并且将有ID为标识的表点击后面的编辑,勾选插入标识 这个关键
然后将所有需要导出数据的列,点击后面的“编辑”,勾选“使用标量XX”,确定,完成,大功告成!!!!!!! |