【发布时间】:2013-08-30 21:04:39
【问题描述】:
我分别在两个会话中有两个测试事务。假设这两个事务将同时运行。我试图做的是让一个交易在另一笔交易完成后正确插入发票号码。没有重复。我做了如下。但是如果我在会话 2 中使用 (tablockx) 删除,它们将不再起作用。我查了在线书,但没有答案。有人会帮忙吗? Serializable 不起作用,因为两个 SELECT 在这里彼此互斥。谢谢。
在会话 1 中:
begin transaction
declare @i int
select @i=MAX(InvNumber) from Invoice
with(tablockx)
where LocName='A'
waitfor delay '00:00:10'
set @i=@i+1
insert into Invoice values('A',@i);
commit
在会话 2 中:
begin transaction
declare @i int
select @i=MAX(InvNumber) from Invoice
with(tablockx)
where LocName='A'
set @i=@i+1
insert into Invoice values('A',@i);
commit
【问题讨论】:
标签: sql-server sql-server-2008 tsql sql-server-2005 sql-server-2008-r2