您需要使用從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