Skip to content

Commit b820a86

Browse files
committed
Initial mock up for get outer command
BrentOzarULTD#2887 An initial mock up for get outer command addition. Not a finished version this is just putting in place the main code less any log to table elements.
1 parent 9cbe691 commit b820a86

1 file changed

Lines changed: 75 additions & 1 deletion

File tree

‎sp_BlitzWho.sql‎

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ ALTER PROCEDURE dbo.sp_BlitzWho
2121
@MinBlockingSeconds INT = 0 ,
2222
@CheckDateOverride DATETIMEOFFSET = NULL,
2323
@ShowActualParameters BIT = 0,
24+
@GetOuterCommand BIT = 0,
2425
@Version VARCHAR(30) = NULL OUTPUT,
2526
@VersionDate DATETIME = NULL OUTPUT,
2627
@VersionCheckMode BIT = 0,
@@ -573,6 +574,56 @@ SELECT @BlockingCheck = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
573574
JOIN sys.sysprocesses AS sys2
574575
ON sys1.spid = sys2.blocked;
575576
577+
'+CASE
578+
WHEN (@GetOuterCommand = 1 AND (NOT EXISTS(SELECT 1 FROM sys.all_objects WHERE [name] = N'dm_exec_input_buffer'))) THEN N'DECLARE @Iteration INT = 1;
579+
DECLARE @DBCCCommand NVARCHAR(50);
580+
DECLARE @Sessioncount INT;
581+
DECLARE @SessionID INT = 0;
582+
583+
DECLARE @Sessions TABLE
584+
(
585+
session_id INT
586+
);
587+
588+
DECLARE @inputbuffer TABLE
589+
(
590+
ID INT IDENTITY(1,1),
591+
session_id INT,
592+
event_type NVARCHAR(30),
593+
parameters SMALLINT,
594+
event_info NVARCHAR(4000)
595+
);
596+
597+
INSERT INTO @Sessions (session_id)
598+
SELECT session_id
599+
FROM sys.dm_exec_sessions
600+
WHERE session_id <> @@SPID
601+
AND session_id > 50;
602+
603+
SELECT @Sessioncount = COUNT(*) FROM @Sessions;
604+
605+
WHILE (@Iteration <= @Sessioncount)
606+
BEGIN
607+
SELECT TOP 1 @SessionID = session_id
608+
FROM @Sessions
609+
WHERE session_id > @SessionID
610+
ORDER BY session_id ASC;
611+
612+
SET @DBCCCommand = ''DBCC INPUTBUFFER (''+CAST(@SessionID AS NVARCHAR(10))+'') WITH NO_INFOMSGS;'';
613+
614+
INSERT INTO @inputbuffer (event_type,parameters,event_info)
615+
EXEC(@DBCCCommand);
616+
617+
UPDATE @inputbuffer
618+
SET session_id = @SessionID
619+
WHERE ID = SCOPE_IDENTITY();
620+
621+
SET @Iteration += 1;
622+
623+
END'
624+
ELSE N''
625+
END+
626+
N'
576627
577628
DECLARE @LiveQueryPlans TABLE
578629
(
@@ -581,7 +632,6 @@ SELECT @BlockingCheck = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
581632
);
582633
583634
'
584-
585635
IF EXISTS (SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('sys.dm_exec_query_statistics_xml') AND name = 'query_plan')
586636
BEGIN
587637
SET @BlockingCheck = @BlockingCheck + N'
@@ -608,6 +658,10 @@ BEGIN
608658
ELSE query_stats.statement_end_offset
609659
END - query_stats.statement_start_offset )
610660
/ 2 ) + 1), dest.text) AS query_text ,
661+
'+CASE
662+
WHEN @GetOuterCommand = 1 THEN N'event_info AS outer_command,'
663+
ELSE N''
664+
END+N'
611665
derp.query_plan ,
612666
qmg.query_cost ,
613667
s.status ,
@@ -727,6 +781,14 @@ BEGIN
727781

728782
SET @StringToExecute +=
729783
N'FROM sys.dm_exec_sessions AS s
784+
'+
785+
CASE
786+
WHEN @GetOuterCommand = 1 THEN CASE
787+
WHEN EXISTS(SELECT 1 FROM sys.all_objects WHERE [name] = N'dm_exec_input_buffer') THEN N'OUTER APPLY sys.dm_exec_input_buffer (s.session_id, 0) AS ib'
788+
ELSE N'LEFT JOIN @inputbuffer ib ON s.session_id = ib.session_id'
789+
END
790+
ELSE N''
791+
END+N'
730792
LEFT JOIN sys.dm_exec_requests AS r
731793
ON r.session_id = s.session_id
732794
LEFT JOIN ( SELECT DISTINCT
@@ -813,6 +875,10 @@ IF @ProductVersionMajor >= 11
813875
ELSE query_stats.statement_end_offset
814876
END - query_stats.statement_start_offset )
815877
/ 2 ) + 1), dest.text) AS query_text ,
878+
'+CASE
879+
WHEN @GetOuterCommand = 1 THEN N'event_info AS outer_command,'
880+
ELSE N''
881+
END+N'
816882
derp.query_plan ,
817883
CAST(COALESCE(qs_live.Query_Plan, ''<?No live query plan available. To turn on live plans, see https://www.BrentOzar.com/go/liveplans ?>'') AS XML) AS live_query_plan ,
818884
STUFF((SELECT DISTINCT N'', '' + Node.Data.value(''(@Column)[1]'', ''NVARCHAR(4000)'') + N'' {'' + Node.Data.value(''(@ParameterDataType)[1]'', ''NVARCHAR(4000)'') + N''}: '' + Node.Data.value(''(@ParameterCompiledValue)[1]'', ''NVARCHAR(4000)'')
@@ -991,6 +1057,14 @@ IF @ProductVersionMajor >= 11
9911057

9921058
SET @StringToExecute +=
9931059
N' FROM sys.dm_exec_sessions AS s
1060+
'+
1061+
CASE
1062+
WHEN @GetOuterCommand = 1 THEN CASE
1063+
WHEN EXISTS(SELECT 1 FROM sys.all_objects WHERE [name] = N'dm_exec_input_buffer') THEN N'OUTER APPLY sys.dm_exec_input_buffer (s.session_id, 0) AS ib'
1064+
ELSE N'LEFT JOIN @inputbuffer ib ON s.session_id = ib.session_id'
1065+
END
1066+
ELSE N''
1067+
END+N'
9941068
LEFT JOIN sys.dm_exec_requests AS r
9951069
ON r.session_id = s.session_id
9961070
LEFT JOIN ( SELECT DISTINCT

0 commit comments

Comments
 (0)