首页 > 解决方案 > 在类型转换中需要有关 SQL Server 中执行计划的帮助

问题描述

我在执行计划中收到以下警告。请一些人提供有关如何解决此错误的建议。

表达式中的类型转换 (CONVERT(int,STRING_SPLIT.[value],0)) 可能会影响查询计划选择中的“CardinalityEstimate”

在此处输入图像描述

上面的警告见于下面的 SQL 语句

SELECT TE.value AS GroupID
    ,ISNULL(TM.TotalCount, 0) AS GroupCount
FROM #tblWorkQueueDocuemnt TM
RIGHT OUTER JOIN (
    SELECT CONVERT(INT, value) AS value
    FROM STRING_SPLIT('1,2,3,4', ',')
    ) TE ON TM.GroupID = TE.value

#tblWorkQueueDocuemnt :创建表的语句。创建表#tblWorkQueueDocuemnt(GroupID INT,TotalCount INT)

标签: sqlsql-serverstringcsvlateral-join

解决方案


基本上,警告消息表明,由于类型转换,索引不能在派生表中使用。我认为这在这里并不重要,因为派生表本身是基于已解析的文字字符串的 - 所以根本不可能有索引。

附带说明:您真的需要将此值作为文字 CSV 字符串传递吗?如果使用 构建适当的派生表会更简单values(),如下所示:

select te.value as groupid, coalesce(tm.totalcount, 0) as groupcount
from (values (1), (2), (3), (4)) as te(groupid)
left join #tblworkqueuedocuemnt tm on tm.tm.groupid = te.value

顺便说一句,这将避免警告(不需要转换,因为值是从正确的数据类型开始的)。但是,再一次,我认为你不应该担心这个警告。


推荐阅读