【发布时间】:2021-12-13 01:58:20
【问题描述】:
有人能解释一下为什么 t-sql select 会创建三个打开的事务吗?为什么它会创建一个交易呢?
我在名为jobimage 的表上有一个这样的查询,没有触发器,我在 SSMS 中作为新查询运行:
SELECT 1
FROM [JobImage] AS [j]
WHERE ((((([j].[JobId] = 3401639)
AND ([j].[DateTime] = '2021-10-27 09:18:05.3441290'))
AND ([j].[Comment] = ''))
AND ([j].[Stage] = 'Items to Fit'))
AND ([j].[Mandatory] = 0))
AND ([j].[Image] = 0xFFD8F.....002110103)
问题在于类型为varbinary(max) 的图像列,如果我将其排除在选择之外,则没有问题,但如果我包含它,那么查询就会挂起,如果我在挂起时运行 sp_whoisactive然后它报告该查询创建了三个打开的事务,这会导致几分钟的阻塞问题。使用 NOLOCK 提示没有区别。
【问题讨论】:
标签: sql select transactions varbinary