Gre*_*ley 7 sql-server transactions
考虑以下SQL:
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
INSERT Bands
( Name )
SELECT 'Depeche Mode'
UNION
SELECT 'Arcade Fire'
-- I've indented the inner transaction to make it clearer.
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM Bands
COMMIT
-- What is the isolation level right here?
UPDATE Bands
SET Name = 'Modest Mouse'
WHERE Name = 'Oddest House'
COMMIT
总而言之,我们启动一个事务并将其隔离级别设置为READ COMMITTED.然后我们做一些随机SQL并启动另一个嵌套事务.在此事务中,我们将隔离级别更改为READ UNCOMMITTED.然后我们提交该事务并返回另一个事务.
现在,我的猜测是在内部提交之后,隔离级别返回READ COMMITTED.它是否正确?
你[Bob Probst]是正确的.有趣的是,根据您链接的文档:
如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL,则当对象返回控件时,隔离级别将重置为调用对象时生效的级别.例如,如果在批处理中设置REPEATABLE READ,然后批处理调用将隔离级别设置为SERIALIZABLE的存储过程,则当存储过程将控制权返回给批处理时,隔离级别设置将恢复为REPEATABLE READ.
所以,这里的底线是SET TRANSACTION ISOLATION LEVEL具有过程亲和力,而不是事务亲和力(正如我所想的那样).
真棒!