Вы можете получить список незафиксированных транзакций с помощью следующего запроса:
SELECT
dm_tran_locks.request_session_id,
dm_tran_locks.resource_database_id,
DB_NAME(dm_tran_locks.resource_database_id) AS dbname,
dm_tran_locks.resource_associated_entity_id,
dm_tran_locks.resource_type,
dm_tran_locks.resource_description,
dm_tran_locks.resource_associated_entity_id,
dm_tran_locks.request_mode,
dm_tran_locks.request_status
FROM sys.dm_tran_locks
WHERE resource_associated_entity_id > 0
AND resource_database_id = DB_ID();
Тогда можно получить данные из заблокированной строки с помощью:
SELECT *
FROM [your_table]
WHERE %%lockres%% = '[insert dm_tran_locks.resource_description value]';
Итак,для вашего примера вы можете указать количество блокировок в строке:
SELECT COUNT(1)
FROM sys.dm_tran_locks locks
INNER JOIN bbajobs
ON bbajobs.%%lockres%% = locks.resource_description
WHERE
resource_associated_entity_id > 0
AND
-- Ensure the lock is on the same database
resource_database_id = DB_ID()
AND
-- Filter on row only
resource_type = 'KEY'
AND
-- Filter on request ID
bbajobs.JID = 40970