当数据库中插入新数据后,我想获取它的id,由于数据量比较大我需要使用事物隔离来实现,事物的隔离级别IsolationLevel怎么设置为Serializable
begin tran mytran
insert into t() values()
select top 1 id from t with(tablockx) order by id desc
rollback tran mytran
commit tran由于并发数据量比较大,会出现同时插入数据的情况,我主要是想得到新插入数据的id的正确性。还要保证速度。请问怎么样弄比较好,还有这样写的话,会不会因为这里锁定的查询,其它数据就插入不了了?

解决方案 »

  1.   

    我觉得这个事情不好说.
    你应该在插入之前再去获取ID.或者参考如下的内容:
    1 如何锁一个表的某一行A 连接中执行SET TRANSACTION ISOLATION LEVEL REPEATABLE READbegin transelect * from tablename with (rowlock) where id=3waitfor delay '00:00:05'commit tranB连接中如果执行update tablename set colname='10' where id=3 --则要等待5秒update tablename set colname='10' where id<>3 --可立即执行2 锁定数据库的一个表SELECT * FROM table WITH (HOLDLOCK) 
    注意: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK) 
    其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX) 
    其他事务不能读取表,更新和删除
      

  2.   

    Serializable就不能并发了,速度没法保证
      

  3.   

    相当于 holdlock
    select * from table(holdlock)