您需要使用从sys.dm_exec_requests视图中的statement_start_offset和statement_end_offsets(不使用sysprocesses中所示的文章中),以SUBSTRING了问题的代码段。请参阅sys.dm_exec_sql_text()的BOL主题中的示例。
编辑:
这里是如何做我上面说:
SELECT
spid = r.session_id,
BlockingSPID = r.blocking_session_id,
DatabaseName = DB_NAME(r.database_id),
s.program_name,
s.login_name,
ObjectName = OBJECT_NAME(st.objectid, st.dbid),
Definition = SUBSTRING(st.text, (r.statement_start_offset/2)+1,
((CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE r.statement_end_offset
END - r.statement_start_offset)/2) + 1)
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text (sql_handle) st
WHERE r.session_id > 50
输出去,因为只有当前正在执行的请求是在dm_exec_requests DMV,其中sysprocesses中显示每个SPID是不同的,执行与否。尽管如此,你可以通过上面的代码找到你的阻塞语句。
你能告诉我们为什么你在运行时使用'CREATE FUNCTION'吗? – 2009-10-13 14:46:54