Confira os procedimentos armazenados internos (mas não documentados, eu acho?) sp_MSset_current_activity
e sp_MSget_current_activity
. Eles devem obter todas as informações que você está procurando - não tão bonitas quanto o monitor de atividades.
Exemplo de uso:
declare @id int
exec dbo.sp_MSset_current_activity @id output
exec dbo.sp_MSget_current_activity @id, @option = 1
exec dbo.sp_MSget_current_activity @id, @option = 2
exec dbo.sp_MSget_current_activity @id, @option = 3
exec dbo.sp_MSget_current_activity @id, @option = 4, @spid = 51 -- locks per spid
exec dbo.sp_MSget_current_activity @id, @option = 5, @obj = N'sysobjects'
O procedimento get contém comentários que descrevem as diferentes opções disponíveis.