Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 338|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    前天 14:32
  • 签到天数: 769 天

    [LV.10]以坛为家III

    2044

    主题

    2102

    帖子

    71万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    712182
    发表于 2021-5-21 04:22:02 | 显示全部楼层 |阅读模式

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-7-29 13:02 , Processed in 0.071951 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表