zoukankan      html  css  js  c++  java
  • 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”,确定,完成,大功告成!!!!!!!

  • 相关阅读:
    7.1 异常处理结构
    第 7 章 异常处理结构、代码测试与调试
    6.4.2 案例精选
    6.4.1 标准库 os、os.path 与 shutil 简介
    设计模式----装饰模式
    设计模式---单例模式
    设计模式--工厂方法模式
    设计模式-简单工厂模式
    设计模式基础知识
    更改Mysql数据库中的数据出现乱码问题
  • 原文地址:https://www.cnblogs.com/seoshanghai/p/2677160.html
Copyright © 2011-2022 走看看