SQL Server中的负SPID?

Mos*_*aou 0 sql sql-server locking

我试图找到并杀死一个已在其中一个表上设置锁定的会话,并阻止许多其他查询执行.为此,我使用以下脚本:

SELECT REQUEST_MODE, REQUEST_TYPE, REQUEST_SESSION_ID
FROM sys.dm_tran_locks
WHERE RESOURCE_TYPE = 'OBJECT'
AND RESOURCE_ASSOCIATED_ENTITY_ID =(SELECT OBJECT_ID('System'))
Run Code Online (Sandbox Code Playgroud)

我得到的结果集如下:

在此输入图像描述

运行EXEC sp_who2不会返回具有负SPID的任何行.如何找到锁定我的表的会话?

Dam*_*ver 5

sys.dm_tran_lock,REQUEST_SESSION_ID:

值-2表示请求属于孤立的分布式事务.

因此,这里不再存在实际的会话ID.阅读这些评论应该会引导您KILL:

使用KILL UOW终止孤立的分布式事务.这些事务与任何真实会话ID无关,而是与会话ID =' - 2'人为关联.此会话ID可以更容易地通过查询sys.dm_tran_locks,sys.dm_exec_sessions或sys.dm_exec_requests视图动态管理视图中的会话ID列标识孤立事务.