Рассмотрим следующий «код»
define stmt1 = 'insert into T(a, b) values(1, 1);
define stmt2 = 'select * from T';
MSSqlCommand.Execute( stmt1;stmt2 );
MSSqlCommand.Execute( stmt2 );
Исследование кэшированных планов запросов с использованием:
SELECT [cp].[refcounts]
, [cp].[usecounts]
, [cp].[objtype]
, [st].[dbid]
, [st].[objectid]
, [st].[text]
, [qp].[query_plan]
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp ;
У меня сложилось впечатление, что первый «Выполнить» вместо этого генерирует составной план выполнениядвух отдельных планов выполнения, тем самым отключая второе «Выполнение», повторно используя любой план выполнения, созданный в первом выполнении.
Я прав?