已有一个数据库实例,现在需要更改某张表T_PRODUCT中的TYPE_I字段类型,现在这张表中数据量已有20万条左右,TYPE_I 内容本应为int型,原设计中误操作为varchar型,现在需要由varchar 转换为 int型,但是直接转换数据库基本上停止响应,请教优化方法,谢谢!

解决方案 »

  1.   

    varchar  --  intcast (varchar as int)如果有错,就是你的varchar里面有数据不是数字,可能包含字母或其他符号.
    找到他,修改或删除他,再cast试试.
    如果行就可以该字段类型了.
      

  2.   

    晕,楼上的,dawugui的方法才是正解。
    就算要删也只删除列就够了。
      

  3.   

    支持:dawugui(潇洒老乌龟) 的说法.也可以试试
    在原表中添加一列,把TYPE_I列的数据导到新增列(估计有不合法数据呢)
    成功的话删除TYPE_I列,然后把新添列改名为TYPE_I不过我还是觉得直接修改的"效率"最高呢.呵呵
      

  4.   

    用isnumeric()检索出不能转换的数据,处理后,再转换
      

  5.   

    to dobear_0922(do熊) :
    首先,你自己试试在一张20W行数据的表中直接修改一列或者新增一列看看需要多久。
    对待这种问题最好的方法就是重建表,然后再把原来的数据导入进去。
    先更改原表的名称,再创建新表,最后导入数据,20W行的数据,用DTS导入估计也就几分钟的事情,但是如果你要直接在原表上修改表结构,你试试看,我估计八成你的机器会当掉,就算运气好能修改成功,那估计也是1千年以后的事情了T_T
      

  6.   

    好像说 添加列->复制数据->删除原列->修改列名
    这样的做法不错的啊.不知道加上20W行记录是不是就不行了.幽灵brother 有试过吗.我不想当机,也等不了一千年的.
    麻烦你告诉我结果就好了.呵呵
      

  7.   

    to juntor() :
    -- 测试环境IBM3850,内存8G,CPU:4*2(双核),操作系统:Windows2003 Server Enterprise Edition ,数据库:SQL Server 2000
    修改一30+W行的表结构,方法步骤如下:
    1.修改原字段A INT----〉varchar
    2.新增字段B 
    3.保存修改
    测试结果:
    等待中.......
    约30分钟后,察看服务器状态,CPU:1%;内存:6+G(设置了AWE,固定为6G)
    企业管理器无响应
    强制关闭企业管理器
    ---------------------
    以上测试操作均在企业管理器中操作,代码的测试我没有做,我不知道这个修改动作要保存多久
    才能成功,我只有等待30分钟的耐心,如果你有兴趣,可以自己试试,也许31分钟的时候会成功,到时记得告诉我结果,谢谢!
      

  8.   

    谢谢,幽灵兄弟的测试,
    你的经历告诉我不能在企业管理器中作直接的类型转换.我说的方法里没有直接修改字段类型的动作的.假设原来的表是这样的tb(id varchar(10),其它字段)
    (这些操作也许用代码的方式来做会好点)
    1.修改tb表id字段名为iid
    2.添加一列,整型,取名叫id
    3.把iid的数据更新到id(前提是数据可以转换成功,我想最耗时的是这步)
    4.删除iid列