次の「コード」を検討してください
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 ;
私の印象では、最初の「実行」は 2 つの単一の実行計画ではなく複合実行計画を生成し、それによって最初の実行で生成された実行計画を再利用する 2 番目の「実行」を無効にします。
私は正しいですか?