【发布时间】:2013-11-23 22:00:26
【问题描述】:
我正在使用 C#、SQL Server 2008 和 SQL 管理对象,我需要知道是否有办法使用 SMO/C# 获取当前正在执行的存储过程。我有一些长期运行的存储过程,我需要通过确定它们是空闲还是执行来监视它们的当前状态。这可以用 SMO 完成吗?如果有,怎么做?
【问题讨论】:
标签: c# sql-server sql-server-2008 smo
我正在使用 C#、SQL Server 2008 和 SQL 管理对象,我需要知道是否有办法使用 SMO/C# 获取当前正在执行的存储过程。我有一些长期运行的存储过程,我需要通过确定它们是空闲还是执行来监视它们的当前状态。这可以用 SMO 完成吗?如果有,怎么做?
【问题讨论】:
标签: c# sql-server sql-server-2008 smo
您可以使用 Server 对象上的 EnumProccesses 方法返回它。不过,我真的觉得这是“当你有一把锤子时,一切看起来都像钉子”。也就是说,您将能够针对 sys.dm_exec_requests 等系统视图使用原始 T-SQL 做得更好
【讨论】:
我同意 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
【讨论】: