Skip to content

Parse Proc Call Traces

A view that parses stored procedure names out of RPC:Completed rows in a trace table.

Published Aug 30, 2010

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'
An unhandled error has occurred. Reload 🗙