这里有个表,有两列
表1:a1,a2其中字段a2的值由另一个表(表2)决定
表2:b1,b2,b3
如果b2<a2<b3,那么a2=b1;当一下子向表1插入5000多条记录时,
如果不对列a2符值,则速度正常
如果通过以下两种方式对a2符值,则速度很慢
1、通过程序从数据库中找出符合b2<a2<b3的记录,对a2符值;
2、写个触发器,当插入一条记录时,找出符合b2<a2<b3的记录,对a2符值;
大家有什么好的解决方法,实现高效的批量插入吗?
谢谢!

解决方案 »

  1.   


    保证 表2 里有且只有一条记录使得 a2 有值?在此前提下可以尝试在一个事务里执行两个步骤:1,将5K记录放到 表1,不给 a2 赋值,假定 表1 的主键是自增列,插入记录之前的最大值是 1000
    2,update 表2 set a2 = (select b1 from 表2 where b2<a2<b3) where Id > 1000
      

  2.   

    大数据量插入使用sqlbuckcopy
    存储过程判断
      

  3.   

    1.用触发器还不如用存储过程游标取数据判断后update2.如果两个表有关联字段,将要插入的数据先一次写入临时表temp,然后利用
    INSERT INTO 表1 select
      (CASE WHEN temp.a1>表2.b2 and temp.a1<表2.b3 Then 表2.b1 ELSE temp.a1 END) as a1, temp.a2 from temp inner join 表2 on ---关联字段
      

  4.   

    上面a2与a1写反了,只说思路要么分批(比如一千条执行一次)
    要么用bulkCopy.WriteToServer(reader)类,这个可以写上十万级的数据,效率很高
      

  5.   

    刚开始问题有个错误,
    应该是如果b2<a1<b3,那么a2=b1;
    不好意思,
    用#7楼的方法得到的效果还可以,谢谢了哈!
      

  6.   

    大批量插入的话用sqlbuckcopy
    效果不错~