这个问题困扰了我挺长时间了,一直都没能比较好的解决。您看看有没有什么招儿,我再试试问题是这样的:我有一个A表,表里面存有100多万条记录A表的结构就是下面这样的:
A (用户编号, 姓名, 地址, 邮编,国家)   用户编号就是主键我现在需要将这个表里的记录信息,一条一条的处理 抽取各个列的部分信息 组成一个长的字符串存到 B表的“抽取信息”这一列当中。B表的结构就是下面这样的
B(用户编号,姓名,地址,邮编,国家,抽取信息)
我用java写代码
方法一:最开始的时候,我就是先将A表的数据弄个resultset然后在while语句里面做个循环更新B表当中的数据ResultSet rs=stmt.execute(select * from A)while (rs.next)
{
    处理该条记录,得到处理出来的值;
    rs.updateString("抽取信息",处理的值);把这个值放到“抽取信息”这一列;
    rs.updaterow();}就按照这样的方式,我发现及时经过了好长好长时间都不能将B表更新完,而且会越来越慢越来越慢。估计每个几十分钟也弄不出来 所以根本不成。后来我就在论坛里搜索了一下,
发现有人说用存储过程处理海量数据的说法,我就学了一下,用方法二:在sql server里面写了个最最简单的存储过程  update  b (列) @对应的值
然后在那个while 循环里面调用这存储过程
while (rs.next)
{
  调用存储过程;}
我发现虽然速度快了, 虽然不是几十分钟吧,但是也得好多好多分钟。所以我也觉得这方法不对劲儿。
各位说一下,给指条路说我为了更新这值,到底能不能在 若干秒中得到结果呢?
补充一下: 我搜索处理海量数据的时候,我看见有人提到 ‘bulk insert',  'bcp', '利用txt文本’做中间媒介等等方法,这些我都没试验过,我对数据库的操并不熟悉,还没啥经验呢,您要是懂的话,帮帮给些提示吧,我好学学。谢了。 

解决方案 »

  1.   


    UPDATE  b
    SET     b.抽取信息 = ( SELECT   用户编号 + 姓名 + 地址 + 邮编 + 国家
                       FROM     A
                       WHERE    A.用户编号 = B.用户编号
                     )
      

  2.   

    如果是比较简单的拼接规则,可以直接在数据库内完成
    INSERT INTO B
    SELECT A.*,(.....) AS [抽取信息] FROM A
      

  3.   

    insert into B(a,b)
    select a,b from A
      

  4.   


    任意的?那数据库没法处理吧!如果是多种情况还可以,任意那就不是SQL处理的了。
      

  5.   

    您好,可否在数据库内完成抽取部分信息组合成一个字符串的功能?例如在java程序中,抽取的信息定义为“姓名的前两个字母+邮编去掉空格+国家的首字母”组成,我就可以这样写String 抽取信息=name.subtring(0,2)+postcode.subtring.replace(" ","")+country.subtring(0,1)然后根据抽取信息的值update B表的那一列那么在您说的数许库内完成是否也可以有这些subtring, replace 等功能的方法存在?
      

  6.   

      没有规律 抽取字段 你还是在程序中处理吧
    完了在程序中拼接SQL语句
      

  7.   


    那这样的话比就是像方法一这样的处理方式了么ResultSet rs=stmt.execute(select * from A)while (rs.next)
    {
      处理该条记录,得到处理出来的值;
      rs.updateString("抽取信息",处理的值);把这个值放到“抽取信息”这一列;
      rs.updaterow();}
      

  8.   

    有空请帮忙看一下http://topic.csdn.net/u/20110117/16/ac67b15f-1bcc-44b3-8cb1-1ef7dc366dc2.html?55186谢谢!