SQL 2005数据库转为2000的终极解决方案 刚刚好

转载至: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(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”,确定,完成,大功告成!!!!!!!

原文地址:https://www.cnblogs.com/seoshanghai/p/2677160.html