我在作项目是遇到这个问题,请大家帮帮忙
一共有三个表
水表基础表,水表当前表,水表历史数据表
每个月我的程序需要根据水表基础表中的有效水表,
加上根据有效水表表对应的从历史数据表中查到的上月的止码数据生成水表当前表,
并不是所有的基础表中的水表都是有效,同时历史数据表中的数据也不是全部都有效
存在一个进行循环查找,在生成的问题,我写了一段代码,大致的意思是,
从基础表中的有效表数据开始做循环,对于有效的水表,再在历史数据中查找对应的上月止码
然后把这些数据插入到当前操作的水表当前表中,我一共有4000条数据,执行一次居然花了30分钟
我的机器配置还很不错。
相信是算法不够好,我也想在数据库端实现这个过程,但是又没有存储过程的经验,
特别是对SQL SERVER中游标的控制,
那位仁兄,帮帮忙,分数不够可以加,
最好可以告诉我存储过程的实现方法。谢谢,在线等待

解决方案 »

  1.   

    insert into 当前表(水表号,止码数据)
    select A.水表号,B.止码数据 from
      水表基础表 A,水表历史数据表 B
     where a.水表号 = b.水表号
       and a.有效 = xxx
       and b.月份 = (select max(月份) from 水表历史数据表 
                      where 水表号 = a.水表号)
       
      

  2.   

    具体的三个表如下
    当前表 
    水表号,起码,止码 历史表
    水表号,时间(月份),起码,止码,lslast(是否为最后),基础表
    水表号,水表状态 ,是否为新水表 加入时起码,
    如果是新水表则,使用新加入时的起码,如果不是则使用历史表,同时如果有年的问题在里面,max(月份)不是很容易操作吧,
     genphone_ru(改行去学VC) ,是否能够给我上面这种表的存储过程,最好包括错误处理,(失败回滚等)
    谢谢
      

  3.   

    insert into 当前表(水表号,起码)
    select A.水表号,B.止码 from
      基础表 A,历史表 B
     where a.水表号 = b.水表号
       and a.有效状态 = xxx  //怎么判断有效???
       and b.时间 = 上月时间
      

  4.   

    使用两个sql,一个处理新水表,一个处理原来的,这样就可以不使用存储过程,当然,用存储过程可能会更好一些,但是对于程序升级可能带来不便。