我考虑过以下SQL语句:
INSERT INTO A(a1, a2)
SELECT b1, udf_SomeFunc(b1)
FROM B
udf_SomeFunc在表A上进行选择。据我所知,首先,在A上设置共享锁(我现在只谈论表A),然后,在释放此锁之后,获得一个独占锁。插入数据。问题是:是否有可能,另一个事务将在表A上获得独占锁定,就在当前事务在A上独占lok之前?
答案 0 :(得分:1)
思考的食物
create table test(id int)
insert test values(1)
GO
现在在一个窗口中运行此
begin tran
insert into test
select * from test with (holdlock, updlock)
waitfor delay '00:00:30'
commit
正在运行时打开另一个连接并执行此操作
begin tran
insert into test
select * from test with (holdlock, updlock)
commit
正如您所见,第二次插入在第一次交易完成之前不会发生
现在取出锁定提示并观察差异