SQL Server初学!!
用select isnull(max(PlanID),0)+1 as PlanID from T_Plan_Main
查出这表里面最大的那个PlanID,用这个PlanID作为关键字将数据插入近表中但是用户多了以后,在我算出最大的PlanID之后别的用户先在这个里面插入PlanID的数据,再往里面插就插不进去了,
也是查出最大编号,和按这个最大编号插入数据,中间有并发错误,请问如何解决,谢谢
用select isnull(max(PlanID),0)+1 as PlanID from T_Plan_Main
查出这表里面最大的那个PlanID,用这个PlanID作为关键字将数据插入近表中但是用户多了以后,在我算出最大的PlanID之后别的用户先在这个里面插入PlanID的数据,再往里面插就插不进去了,
也是查出最大编号,和按这个最大编号插入数据,中间有并发错误,请问如何解决,谢谢
create proc spMaxID
as
begin transaction /*启动事务*/
declare @MaxID int
--使用holdlock使锁保持到事务结束,xlock保证事务期间禁止其他用户读取,防止生成相同的PlanID.
select @MaxID = isnull(max(PlanID),0)+1 as PlanID from T_Plan_Main with (holdlock,xlock)
--插入最大值
insert into T_Plan_Main(PlanID) values(@MaxID)
commit transaction /*提交事务,同时自动解锁,以保证其他用户生成新的PlanID*/
GO