Вам нужно использовать Statement_start_offset и Statement_end_offsets из sys.dm_exec_requests (не используйте sysprocesses, как показано в статье), чтобы ПОДЧЕРКНУТЬ оскорбительный раздел кода. См. Пример в разделе BOL для sys.dm_exec_sql_text () .
EDIT:
Вот как сделать то, что я сказал выше:
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
Вывод будет другим, потому что только в настоящее время выполняющиеся запросы находятся в DMV dm_exec_requests, где sysprocesses показывают каждый spid, выполняющийся или нет. Вы можете найти свои блокирующие операторы с помощью приведенного выше кода.