Skip to content

Commit d529af7

Browse files
committed
Tidy variable stuff
This takes care of sp_BlitzCache
1 parent d8b53fc commit d529af7

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

sp_BlitzCache.sql

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3086,7 +3086,7 @@ OPTION (RECOMPILE);
30863086
IF EXISTS ( SELECT 1
30873087
FROM ##bou_BlitzCacheProcs AS bbcp
30883088
WHERE bbcp.implicit_conversions = 1
3089-
OR bbcp.QueryType LIKE 'Procedure or Function:%')
3089+
OR bbcp.QueryType LIKE '%Procedure or Function: %')
30903090
BEGIN
30913091

30923092
RAISERROR(N'Getting information about implicit conversions and stored proc parameters', 0, 1) WITH NOWAIT;
@@ -3105,7 +3105,8 @@ SELECT DISTINCT @@SPID,
31053105
q.n.value('@ParameterCompiledValue', 'NVARCHAR(1000)') AS compile_time_value
31063106
FROM #query_plan AS qp
31073107
JOIN ##bou_BlitzCacheProcs AS b
3108-
ON b.QueryHash = qp.QueryHash
3108+
ON (b.QueryType = 'adhoc' AND b.QueryHash = qp.QueryHash)
3109+
OR (b.QueryType <> 'adhoc' AND b.SqlHandle = qp.SqlHandle)
31093110
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:ParameterList/p:ColumnReference') AS q(n)
31103111
WHERE b.SPID = @@SPID
31113112
OPTION ( RECOMPILE );
@@ -3122,7 +3123,8 @@ SELECT DISTINCT @@SPID,
31223123
qq.c.value('@Expression', 'NVARCHAR(128)') AS expression
31233124
FROM #query_plan AS qp
31243125
JOIN ##bou_BlitzCacheProcs AS b
3125-
ON b.QueryHash = qp.QueryHash
3126+
ON (b.QueryType = 'adhoc' AND b.QueryHash = qp.QueryHash)
3127+
OR (b.QueryType <> 'adhoc' AND b.SqlHandle = qp.SqlHandle)
31263128
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:Warnings/p:PlanAffectingConvert') AS qq(c)
31273129
WHERE qq.c.exist('@ConvertIssue[.="Seek Plan"]') = 1
31283130
AND qp.QueryHash IS NOT NULL
@@ -3175,15 +3177,32 @@ SELECT @@SPID AS SPID,
31753177
FROM #conversion_info AS ci
31763178
OPTION ( RECOMPILE );
31773179

3178-
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3179-
UPDATE sp
3180-
SET sp.variable_datatype = vi.variable_datatype,
3181-
sp.compile_time_value = vi.compile_time_value
3182-
FROM #stored_proc_info AS sp
3183-
JOIN #variable_info AS vi
3184-
ON sp.QueryHash = vi.QueryHash
3185-
AND sp.variable_name = vi.variable_name
3186-
OPTION ( RECOMPILE );
3180+
IF EXISTS ( SELECT *
3181+
FROM #stored_proc_info AS sp
3182+
JOIN #variable_info AS vi
3183+
ON (sp.proc_name = 'adhoc' AND sp.QueryHash = vi.QueryHash)
3184+
OR (sp.proc_name <> 'adhoc' AND sp.SqlHandle = vi.SqlHandle)
3185+
AND sp.variable_name = vi.variable_name )
3186+
BEGIN
3187+
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3188+
UPDATE sp
3189+
SET sp.variable_datatype = vi.variable_datatype,
3190+
sp.compile_time_value = vi.compile_time_value
3191+
FROM #stored_proc_info AS sp
3192+
JOIN #variable_info AS vi
3193+
ON (sp.proc_name = 'adhoc' AND sp.QueryHash = vi.QueryHash)
3194+
OR (sp.proc_name <> 'adhoc' AND sp.SqlHandle = vi.SqlHandle)
3195+
AND sp.variable_name = vi.variable_name
3196+
OPTION ( RECOMPILE );
3197+
END
3198+
ELSE
3199+
BEGIN
3200+
RAISERROR(N'Inserting variables', 0, 1) WITH NOWAIT;
3201+
INSERT #stored_proc_info ( SPID, SqlHandle, QueryHash, variable_name, variable_datatype, compile_time_value, proc_name )
3202+
SELECT vi.SPID, vi.SqlHandle, vi.QueryHash, vi.variable_name, vi.variable_datatype, vi.compile_time_value, vi.proc_name
3203+
FROM #variable_info AS vi
3204+
OPTION ( RECOMPILE );
3205+
END
31873206

31883207
RAISERROR(N'Updating procs', 0, 1) WITH NOWAIT;
31893208
UPDATE s
@@ -3201,6 +3220,9 @@ SET s.variable_datatype = CASE WHEN s.variable_datatype LIKE '%(%)%' THEN
32013220
CHARINDEX(')', s.compile_time_value) - 1
32023221
- CHARINDEX('(', s.compile_time_value)
32033222
)
3223+
WHEN variable_datatype NOT IN ('bit', 'tinyint', 'smallint', 'int', 'bigint')
3224+
AND s.variable_datatype NOT LIKE '%binary%' THEN
3225+
QUOTENAME(compile_time_value, '''')
32043226
ELSE s.compile_time_value
32053227
END
32063228
FROM #stored_proc_info AS s

0 commit comments

Comments
 (0)