@@ -1147,9 +1147,7 @@ CREATE TABLE #stored_proc_info
1147
1147
compile_time_value NVARCHAR (128 ),
1148
1148
proc_name NVARCHAR (300 ),
1149
1149
column_name NVARCHAR (128 ),
1150
- converted_to NVARCHAR (128 ),
1151
- parameterization_type INT ,
1152
- optimization_level VARCHAR (100 )
1150
+ converted_to NVARCHAR (128 )
1153
1151
);
1154
1152
1155
1153
CREATE TABLE #plan_creation
@@ -3086,7 +3084,7 @@ OPTION (RECOMPILE);
3086
3084
IF EXISTS ( SELECT 1
3087
3085
FROM ##bou_BlitzCacheProcs AS bbcp
3088
3086
WHERE bbcp .implicit_conversions = 1
3089
- OR bbcp .QueryType LIKE ' Procedure or Function:%' )
3087
+ OR bbcp .QueryType LIKE ' % Procedure or Function: %' )
3090
3088
BEGIN
3091
3089
3092
3090
RAISERROR (N ' Getting information about implicit conversions and stored proc parameters' , 0 , 1 ) WITH NOWAIT ;
@@ -3105,7 +3103,8 @@ SELECT DISTINCT @@SPID,
3105
3103
q .n .value (' @ParameterCompiledValue' , ' NVARCHAR(1000)' ) AS compile_time_value
3106
3104
FROM #query_plan AS qp
3107
3105
JOIN ##bou_BlitzCacheProcs AS b
3108
- ON b .QueryHash = qp .QueryHash
3106
+ ON (b .QueryType = ' adhoc' AND b .QueryHash = qp .QueryHash )
3107
+ OR (b .QueryType <> ' adhoc' AND b .SqlHandle = qp .SqlHandle )
3109
3108
CROSS APPLY qp .query_plan .nodes (' //p:QueryPlan/p:ParameterList/p:ColumnReference' ) AS q(n)
3110
3109
WHERE b .SPID = @@SPID
3111
3110
OPTION ( RECOMPILE );
@@ -3122,7 +3121,8 @@ SELECT DISTINCT @@SPID,
3122
3121
qq .c .value (' @Expression' , ' NVARCHAR(128)' ) AS expression
3123
3122
FROM #query_plan AS qp
3124
3123
JOIN ##bou_BlitzCacheProcs AS b
3125
- ON b .QueryHash = qp .QueryHash
3124
+ ON (b .QueryType = ' adhoc' AND b .QueryHash = qp .QueryHash )
3125
+ OR (b .QueryType <> ' adhoc' AND b .SqlHandle = qp .SqlHandle )
3126
3126
CROSS APPLY qp .query_plan .nodes (' //p:QueryPlan/p:Warnings/p:PlanAffectingConvert' ) AS qq(c)
3127
3127
WHERE qq .c .exist(' @ConvertIssue[.="Seek Plan"]' ) = 1
3128
3128
AND qp .QueryHash IS NOT NULL
@@ -3175,15 +3175,32 @@ SELECT @@SPID AS SPID,
3175
3175
FROM #conversion_info AS ci
3176
3176
OPTION ( RECOMPILE );
3177
3177
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 );
3178
+ IF EXISTS ( SELECT *
3179
+ FROM #stored_proc_info AS sp
3180
+ JOIN #variable_info AS vi
3181
+ ON (sp .proc_name = ' adhoc' AND sp .QueryHash = vi .QueryHash )
3182
+ OR (sp .proc_name <> ' adhoc' AND sp .SqlHandle = vi .SqlHandle )
3183
+ AND sp .variable_name = vi .variable_name )
3184
+ BEGIN
3185
+ RAISERROR (N ' Updating variables' , 0 , 1 ) WITH NOWAIT ;
3186
+ UPDATE sp
3187
+ SET sp .variable_datatype = vi .variable_datatype ,
3188
+ sp .compile_time_value = vi .compile_time_value
3189
+ FROM #stored_proc_info AS sp
3190
+ JOIN #variable_info AS vi
3191
+ ON (sp .proc_name = ' adhoc' AND sp .QueryHash = vi .QueryHash )
3192
+ OR (sp .proc_name <> ' adhoc' AND sp .SqlHandle = vi .SqlHandle )
3193
+ AND sp .variable_name = vi .variable_name
3194
+ OPTION ( RECOMPILE );
3195
+ END
3196
+ ELSE
3197
+ BEGIN
3198
+ RAISERROR (N ' Inserting variables' , 0 , 1 ) WITH NOWAIT ;
3199
+ INSERT #stored_proc_info ( SPID, SqlHandle, QueryHash, variable_name, variable_datatype, compile_time_value, proc_name )
3200
+ SELECT vi .SPID , vi .SqlHandle , vi .QueryHash , vi .variable_name , vi .variable_datatype , vi .compile_time_value , vi .proc_name
3201
+ FROM #variable_info AS vi
3202
+ OPTION ( RECOMPILE );
3203
+ END
3187
3204
3188
3205
RAISERROR (N ' Updating procs' , 0 , 1 ) WITH NOWAIT ;
3189
3206
UPDATE s
@@ -3201,6 +3218,9 @@ SET s.variable_datatype = CASE WHEN s.variable_datatype LIKE '%(%)%' THEN
3201
3218
CHARINDEX (' )' , s .compile_time_value ) - 1
3202
3219
- CHARINDEX (' (' , s .compile_time_value )
3203
3220
)
3221
+ WHEN variable_datatype NOT IN (' bit' , ' tinyint' , ' smallint' , ' int' , ' bigint' )
3222
+ AND s .variable_datatype NOT LIKE ' %binary%' THEN
3223
+ QUOTENAME (compile_time_value, ' '' ' )
3204
3224
ELSE s .compile_time_value
3205
3225
END
3206
3226
FROM #stored_proc_info AS s
0 commit comments