No meu ambiente de produção, ocorrem raras transações não dispostas que mantêm o bloqueio em uma tabela. Quero consertar isso no código do meu aplicativo.
Posso obter o TransactionId e o SessionId ad hoc, mas como faço para que os comandos SQL sejam executados na transação para que eu possa rastreá-los até o código do aplicativo?
É assim que obtenho o ID da transação não descartada de longa duração:
SELECT trans.session_id AS [SESSION ID]
,login_name AS [Login NAME]
,trans.transaction_id AS [TRANSACTION ID]
,tas.name AS [TRANSACTION NAME]
,tas.transaction_begin_time AS [TRANSACTION BEGIN TIME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans ON (trans.transaction_id = tas.transaction_id)