SQL Serverで実行したSQLが暗黙の型変換が起こっているかどうかはどうやって調べたらよいのか

あらすじ

環境

SELECT SERVERPROPERTY('productversion') as VERSION;
VERSION
14.0.1000.169

確認方法

システム動的管理ビューから取得できそう。

コマンド

暗黙の型変換が起こっているか確認したいSQLを実行(実際に画面叩くとか)した後に以下のSQLを実行する。

SELECT
  creation_time
  , last_execution_time
  , execution_count
  , query_plan
  , text 
FROM
  sys.dm_exec_query_stats 
  cross apply sys.dm_exec_query_plan(plan_handle) 
  cross apply sys.dm_exec_sql_text(sql_handle) 
order by
-- これは直前に実行したSQLを見る場合。textをLIKEで絞ったりしてもいいかも
  last_execution_time desc; 

実行結果

creation_time last_execution_time execution_count query_plan text
2019/04/25 23:18:39.103 2019/04/25 23:22:29.197 17 下記 下記

query_plan

query_planカラムで実行計画を確認できる。

<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.6" Build="14.0.1000.169">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementText="(@P0 nvarchar(4000),@P1 nvarchar(4000))UPDATE SAMPLESCHEMA.SAMPLETABLE 
          SET USER_CD = @P0 WHERE SAMPLESCHEMA.SAMPLETABLE.ID = @P1">
(略)
  <!-- この辺で暗黙の型変換が起こっている -->
  <ScalarOperator ScalarString="CONVERT_IMPLICIT(nvarchar(10),[@P0],0)">
    <Convert DataType="nvarchar" Length="20" Style="0" Implicit="1">
      <ScalarOperator>
        <Identifier>
          <ColumnReference Column="@P0"/>
        </Identifier>
      </ScalarOperator>
    </Convert>
  </ScalarOperator>
(略)

暗黙の型変換(CONVERT_IMPLICIT)が起こっている。

text

実行したSQLを探すならtextカラムの方が見やすそう。

(@P0 nvarchar(4000),@P1 nvarchar(4000))
UPDATE SAMPLESCHEMA.SAMPLETABLE 
SET
  USER_CD = @P0 
WHERE
  SAMPLESCHEMA.SAMPLETABLE.ID = @P1 

参考