1

I have a big one stored procedure inside that I have called to many other SPs and functions, even such inside SPs may also have calling to some another SPs.

So what my question is can I trace all such SPs execution in a way it actual get executed.

However I know SQL Profiler which trace the sql statements and SPs, but it doesn't populate all the inner SPs executions.

Can any one please let me know, how can I trace all such inner SPs executions.

e.g.:

CREATE PROCEDURE sp_test111
AS
BEGIN
    SELECT * FROM Table1;
END 
GO

CREATE PROCEDURE sp_test11
AS
BEGIN
    EXEC sp_test111;
END 
GO

CREATE PROCEDURE sp_test1
AS
BEGIN
    EXEC sp_test11;
END 
GO

CREATE PROCEDURE sp_test
AS
BEGIN
    EXEC sp_test1;
END 
GO

EXEC sp_test

--Expected result from SQL Trace 
EXEC sp_test
EXEC sp_test1;
EXEC sp_test11;
EXEC sp_test111;
SELECT * FROM Table1;
Bhavesh Harsora
  • 655
  • 5
  • 14

1 Answers1

1

Create a Profiler trace including the SP:Starting and SP:StmtStarting event classs, along with any other filters you may want.

If you need to run the trace unattended, export the trace as a script for server-side tracing (File-->Export-->Script Trace Definition). Customize the sp_trace_create statement in the script to specify the desired trace file name and other options. See https://msdn.microsoft.com/en-us/library/ms190362(v=sql.100).aspx. Below is an example of a customized trace script (included only SP:Starting here for brevity).

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

exec @rc = sp_trace_create @TraceID output, 2, N'C:\TraceFiles\StoredProcedureTrace', @maxfilesize, NULL, 2

if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1

exec sp_trace_setevent @TraceID, 42, 1, @on
exec sp_trace_setevent @TraceID, 42, 9, @on
exec sp_trace_setevent @TraceID, 42, 2, @on
exec sp_trace_setevent @TraceID, 42, 66, @on
exec sp_trace_setevent @TraceID, 42, 3, @on
exec sp_trace_setevent @TraceID, 42, 4, @on
exec sp_trace_setevent @TraceID, 42, 5, @on
exec sp_trace_setevent @TraceID, 42, 6, @on
exec sp_trace_setevent @TraceID, 42, 7, @on
exec sp_trace_setevent @TraceID, 42, 8, @on
exec sp_trace_setevent @TraceID, 42, 10, @on
exec sp_trace_setevent @TraceID, 42, 11, @on
exec sp_trace_setevent @TraceID, 42, 12, @on
exec sp_trace_setevent @TraceID, 42, 14, @on
exec sp_trace_setevent @TraceID, 42, 22, @on
exec sp_trace_setevent @TraceID, 42, 26, @on
exec sp_trace_setevent @TraceID, 42, 28, @on
exec sp_trace_setevent @TraceID, 42, 29, @on
exec sp_trace_setevent @TraceID, 42, 34, @on
exec sp_trace_setevent @TraceID, 42, 35, @on
exec sp_trace_setevent @TraceID, 42, 41, @on
exec sp_trace_setevent @TraceID, 42, 49, @on
exec sp_trace_setevent @TraceID, 42, 50, @on
exec sp_trace_setevent @TraceID, 42, 51, @on
exec sp_trace_setevent @TraceID, 42, 60, @on
exec sp_trace_setevent @TraceID, 42, 62, @on
exec sp_trace_setevent @TraceID, 42, 64, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 4cd51131-ed78-47fc-aad5-d3d12c6409d4'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go

Make note of the trace id returned by the script so that you can later stop and delete the trace. Below is an example using trace id 2.

EXEC sp_trace_setstatus 2, 0; --stop 
EXEC sp_trace_setstatus 2, 2; --delete

You can view the trace file in Profiler, or with fn_trace_getdata (https://msdn.microsoft.com/en-us/library/ms188425(v=sql.100).aspx).

Dan Guzman
  • 43,250
  • 3
  • 46
  • 71