我正在使用C#,SQL Server 2008和SQL管理对象,我需要知道是否有办法使用SMO / C#获取当前正在执行的存储过程。我有一些长期运行的存储过程,我需要通过确定它们是空闲还是执行来监视它们的当前状态。这可以通过SMO完成吗?如果是这样,怎么样?
答案 0 :(得分:1)
您可以使用Server对象上的EnumProccesses方法重新登录它。我真的觉得这是“当你有一把锤子,一切看起来像钉子”的情况。也就是说,对于sys.dm_exec_requests等系统视图,你可以使用原始T-SQL做得更好。
答案 1 :(得分:0)
我同意Ben Thul,来自here的以下SQL语句应该完成这项工作(虽然我还没有测试过):
SELECT requests.session_id,
requests.status,
requests.command,
requests.statement_start_offset,
requests.statement_end_offset,
requests.total_elapsed_time,
details.text
FROM sys.dm_exec_requests requests
CROSS APPLY sys.dm_exec_sql_text (requests.plan_handle) details
WHERE requests.session_id > 50
ORDER BY total_elapsed_time DESC