这里有个表,有两列
表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: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符值;
大家有什么好的解决方法,实现高效的批量插入吗?
谢谢!
保证 表2 里有且只有一条记录使得 a2 有值?在此前提下可以尝试在一个事务里执行两个步骤:1,将5K记录放到 表1,不给 a2 赋值,假定 表1 的主键是自增列,插入记录之前的最大值是 1000
2,update 表2 set a2 = (select b1 from 表2 where b2<a2<b3) where Id > 1000
存储过程判断
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 ---关联字段
要么用bulkCopy.WriteToServer(reader)类,这个可以写上十万级的数据,效率很高
应该是如果b2<a1<b3,那么a2=b1;
不好意思,
用#7楼的方法得到的效果还可以,谢谢了哈!
效果不错~