为什么在设置 TRANSACTION ISOLATION LEVEL SNAPSHOT 之前检查 TRANCOUNT

Why check TRANCOUNT before setting TRANSACTION ISOLATION LEVEL SNAPSHOT

为什么在使用快照隔离时,在设置事务级别之前经常看到 IF @@TRANCOUNT = 0?

即,在存储过程中:

IF @@TRANCOUNT = 0
BEGIN
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
END

其中一个原因来自 Microsoft Documentations:

无法将事务设置为从另一个隔离级别开始的 SNAPSHOT 隔离级别;这样做会导致交易中止。如果事务以 SNAPSHOT 隔离级别开始,您可以将其更改为另一个隔离级别,然后再返回到 SNAPSHOT。事务在第一次访问数据时启动。