场景:
我们程序现在改成多线程了,我现在需要把临时表中的数据给插入到TABLE_M中,但这时候可能其他的线程也在插入,我就不能用之前我们的方案了(select max(oid) from Tuning.TABLE_M。。。,之后去维护主子表关系,改掉TABLE_M的OID的自增属性,插入,之后再添加上自增属性。。。。。。)
我现在是想这样操作:
1,)先插入把临时数据插入到TABLE_M(OID是自增的)中(Insert Into ….select …),我之后获取 select Scope_Identity() as @MaxTABLE_MOID,之后根据这个@MaxTABLE_MOID去修改临时表中的TABLE_MOID.
1.1,)(1,)这种方案会不会出现以下问题:
A线程, 1-10 共10条记录,
B 线程,1-10 共10条记录
A线程插入的时候,
B线程也在再插入
A线程 与 B线程是交互的插入,A线程插入一条,B线程插入一条
运行起来像这样:
比如 此时TABLE_M的OID为 100
A线程插入第一条 TABLE_M的OID变为 101
B线程插入第一条 TABLE_M的OID变为 102
当我A线程插入完的时候,我A线程最后一条记录插入的OID为 120
这时候我的Temp 要到这个120 去修改字表关系
TABLE_M(OID=120) 是A 插入的没问题
TABLE_M(OID=119)是B插入的,这时却关联到了A线程对应的临时表的第9条记录
悲哀