Yak Posting Veteran
Posted - 04/17/2013 : 00:45:00
| Hi All,
i executed below piece of code.
'select * from test where id='+cast(@var as varchar)
While i was reading about EXEC i came across one statement like
"the difference between EXEC and execute sp_executesql are
EXEC won't store the execution plans in plan cache for re use where as sp_executesql will store execution plans for further executions."
But after executing above code and then i look at my plan cahce from below query
SELECT cp.objtype AS ObjectType,
OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
cp.usecounts AS ExecutionCount,
st.TEXT AS QueryText,
qp.query_plan AS QueryPlan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
i was able to see use count for the select statement mention in the above code is 2.
I need a clarification like will EXEC store the execution plans for further executions(Re Use)?
Flowing Fount of Yak Knowledge
Posted - 04/17/2013 : 01:54:05
| Check the following link...
See this point:
1.Ad-hoc SELECT, INSERT, UPDATE and DELETE statements. In order for an execution plan to be cached and re-used for such constructs the two statements must be identical, including spacing and case of each word. Even if one letter is capitalized in one statement but not in the other, the execution plan for ad-hoc SQL statements cannot be reused.