I get this done through DMV's as you can see on the below script:
(it is part of a more detailed script, but I just extracted the part relevant to you in this question)
SELECT
----------------------------------------------------------------
-- get the query - what command we are running inside the stored procedure
-- and the parent query - the the stored procedure
-----------------------------------------------------------------
SUBSTRING (st.text
, (CASE WHEN er.statement_start_offset > DATALENGTH(st.text)
THEN 0 ELSE er.statement_start_offset/2 END)+1
, (CASE WHEN er.statement_end_offset <= 0 THEN DATALENGTH(st.text)
ELSE er.statement_end_offset
END - CASE WHEN er.statement_start_offset > DATALENGTH(st.text)
THEN 0 ELSE er.statement_start_offset/2 END)
+ 1
) AS QUERY
, st.text AS PARENT_QUERY
FROM sys.dm_exec_sessions es
LEFT OUTER JOIN sys.dm_exec_connections ec ON es.session_id = ec.session_id
LEFT OUTER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
LEFT OUTER JOIN sys.server_principals sp ON es.security_id = sp.sid
LEFT OUTER JOIN sys.dm_os_tasks ota ON es.session_id = ota.session_id
LEFT OUTER JOIN sys.dm_os_threads oth ON ota.worker_address = oth.worker_address
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS st
You can see on the example below, it is doing an insert
inside the stored procedure.
