У меня есть следующий запрос, который возвращает любые блокировки для указанной таблицы c. Тем не менее, мне нужно, чтобы дать больше информации. Мне нужно знать, какая строка в настоящее время блокируется.
SELECT
DB_NAME(resource_database_id)
, s.original_login_name
, s.status
, s.program_name
, s.host_name
,*
from
sys.dm_tran_locks dbl
JOIN sys.dm_exec_sessions s ON dbl.request_session_id = s.session_id
where
resource_associated_entity_id = object_id('dbname.scheme.table')AND DB_NAME(resource_database_id) = 'dbname'
Этот запрос работает для отображения, когда есть блокировка. Мне просто нужно немного больше информации. Например, таблица, на которую я смотрю, содержит много заказов. Если кто-то сидит в одном из этих заказов в приложении. Строка будет заблокирована, мне нужен запрос, чтобы показать порядковый номер заблокированной строки.
РЕДАКТИРОВАТЬ: Попытки ниже -
select *
from db.scheme.table
where %%lockres%% in
(
select l.resource_description
from sys.dm_tran_locks as l
where l.resource_type in ('RID')
);
Выше возвращает строку I ' Я ожидаю, что он вернется, но он также вернет много старых строк в таблице, чего я бы не ожидал. Тем не менее, кажется, близко к тому, что мне нужно. С предложениями из ответа ниже я не смог заставить их вернуть какие-либо строки. Я чувствую, что утверждение о том, что было сказано выше, мне не хватает.