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”,确定,完成,大功告成!!!!!!!

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/seoshanghai/p/2677160.html
Copyright © 2011-2022 走看看