Parse Proc Call Traces
A view that parses stored procedure names out of RPC:Completed rows in a trace table.
When you load a trace into a table and want to know which stored procedures were actually called - not the full batch text - this view does the parsing for you. It filters to RPC:Completed events with a non-null object name (skipping sp_reset_connection noise) and extracts just the procedure name from the TextData, handling both "exec proc" and "exec proc @param..." forms. The rest of the row - host, application, login, duration, reads, writes, CPU, database, row counts - comes along for the ride so you can aggregate by procedure.
create view TraceInfo as
SELECT
CASE WHEN CharIndex('exec', Lower(Convert(VarChar(max), TextData))) > 0 then
CASE WHEN CharIndex(' ', Lower(Convert(VarChar(max), TextData))) > 0 then
Left(Substring(Convert(VarChar(max), TextData), CharIndex('exec', Convert(VarChar(max), TextData)) + 5, (LEN(Convert(VarChar(max), TextData)) - CharIndex('exec', Convert(VarChar(max), TextData)) - 5)),
CharIndex(' ', Substring(Convert(VarChar(max), TextData), CharIndex('exec', Convert(VarChar(max), TextData)) + 5, (LEN(Convert(VarChar(max), TextData)) - CharIndex('exec', Convert(VarChar(max), TextData)) - 5))))
ELSE
Substring(Convert(VarChar(max), TextData), CharIndex('exec', Convert(VarChar(max), TextData)) + 5, (LEN(Convert(VarChar(max), TextData)) - CharIndex('exec', Convert(VarChar(max), TextData)) - 5))
END
ELSE
CASE WHEN CharIndex(' ', Lower(Convert(VarChar(max), TextData))) > 0 then
Left(Convert(VarChar(max), TextData),
CharIndex(' ', Convert(VarChar(max), TextData)))
ELSE
Convert(VarChar(max), TextData)
END
END AS TextData,
HostName,
ApplicationName,
LoginName,
Duration,
StartTime,
EndTime,
Reads,
Writes,
CPU,
ObjectName,
DatabaseName,
RowCounts
FROM
trace_table_name T
JOIN sys.trace_events TE
ON T.EventClass = TE.trace_event_id
WHERE
ObjectName is not null
and TE.name = 'RPC:Completed'
and Convert(VarChar(max), TextData) <> 'exec sp_reset_connection'