You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server表值函数锁机制疑问:主查询与函数锁是否独立?

关于表值函数锁机制的疑问

函数代码

ALTER FUNCTION dbo.fn_Test
()
RETURNS 
@t TABLE 
(
    ID INT
)
AS
BEGIN
    INSERT INTO @t(ID) select ID from dbo.Table;    
    RETURN 
END
GO

问题

若在关联其他表的SELECT语句中使用该函数,主查询会对dbo.Table获取共享读锁吗?还是函数会独立于主查询获取锁以填充表变量?

回答

  • 你写的是多语句表值函数(MSUDF),它在被主查询调用时,锁的获取完全处于主查询的事务上下文内,不会独立获取锁。
  • 当主查询执行时,函数内部对dbo.Table的SELECT操作会和主查询的其他操作共用同一个事务,因此会获取共享读锁,锁的生命周期和主查询的事务保持一致,不会因为表变量填充完成就提前释放。
  • 简言之,函数的锁行为是主查询执行流程的一部分,不存在独立的锁上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:54:53