2019年2月25日 星期一

SQL Server execution plan with convert implicit


env: Windows Server 2016
         SQL Server 2016 SP2

最近幫忙看報表語法,發現執行計劃常出現以下警告訊息:
Type conversion in expression ([i].[Item]=CONVERT_IMPLICIT(nvarchar(64),[XXXXX].[XXXXX],0)) may affect "SeekPlan" in query plan choice, Type conversion in expression ([i].[Item]=CONVERT_IMPLICIT(nvarchar(32),[XXXXX].[XXXXX],0)) may affect "SeekPlan" in query plan choice













造成這個原因是等號兩邊資料型態不一致的關係。

比對語法使用的實體TABLE欄位資料型態都是一致的,

以這次的例子發生的原因是宣告的variable table造成:
DECLARE @TESTTB02 TABLE(Item NVARCHAR(64));
       
DECLARE @TESTTB02 TABLE(Item NVARCHAR(32));


解決方式是將NVARCHAR改為VARCHAR,隱含轉換的警告就消失了。
DECLARE @TESTTB02 TABLE(Item VARCHAR(64));
       
DECLARE @TESTTB02 TABLE(Item VARCHAR(32));






沒有留言:

張貼留言