You need to enable JavaScript to run this app. 存储过程内设置事务隔离级别后,被调用的子存储过程是否沿用该级别?
优惠活动
大模型
产品
解决方案
定价
更多

存储过程内设置事务隔离级别后,被调用的子存储过程是否沿用该级别?

存储过程嵌套调用的事务隔离级别继承问题解答

结论

你提供的示例代码中,SecondStoredProc内的SELECT查询会在SNAPSHOT隔离级别下运行。

规则说明

SQL Server 中SET TRANSACTION ISOLATION LEVEL属于会话级别的设置,在没有被显式覆盖的前提下,会作用于当前会话的所有执行逻辑,包括嵌套调用的下层存储过程、自定义函数、动态SQL语句。

只有两种场景会打破这个继承规则:

  • 下层存储过程内部显式执行了SET TRANSACTION ISOLATION LEVEL修改隔离级别:该修改仅在下层存储过程运行周期内生效,执行结束返回上层时,会自动恢复为上层存储过程设置的隔离级别
  • 查询语句本身添加了表级隔离级别提示(例如WITH (READCOMMITTED)):表提示的优先级高于会话级隔离级别设置,会覆盖全局配置

示例验证

你给出的代码中SecondStoredProc没有显式修改隔离级别,也没有添加表提示,因此会直接继承上层FirstStoredProc设置的SNAPSHOT隔离级别。

CREATE PROCEDURE [dbo].[FirstStoredProc]
AS
BEGIN
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT
    EXEC [dbo].[SecondStoredProc]
END;

CREATE PROCEDURE [dbo].[SecondStoredProc]
AS
BEGIN
    SELECT name
    FROM sys.objects
    WHERE type = 'P';
END;

EXEC FirstStoredProc

内容的提问来源于stack exchange,提问作者user3407335

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 08:06:05