SQL Server 表达式中的类型转换可能会影响查询计划中的基数估计

l7wslrjt  于 2023-01-29  发布在  其他
关注(0)|答案(2)|浏览(200)

我的执行计划中有一个警告,我无法删除。我在这里做了一个最小的、可重复的例子:

declare @TestData Table
(
  FloatValue float null
)

insert into @TestData values
 (null), (0.1)

select 
    CONVERT(varchar, FloatValue * 100.00) + ' pct.' PctValue
from 
    @TestData

我把警告也写进去了。

y0u0uwnf

y0u0uwnf1#

您可以在查询中将CONVERT(varchar, FloatValue * 100.00)更改为FORMAT(FloatValue * 100.00, 'N0')

declare @TestData Table
(
  FloatValue float null
)

insert into @TestData values
 (null), (0.1)

select 
    FORMAT(FloatValue * 100.00, 'N0') + ' pct.' PctValue
from 
    @TestData

而且它会摆脱警告:

5vf7fwbs

5vf7fwbs2#

SQL Server有时对警告过于谨慎。
您可能会在执行计划中遇到各种警告,但在复查之后,这些警告被证明是无关紧要的;例如,有时候你可能会看到一个警告,提示内存分配过多,即使这个分配是每个查询可能的 * 最小 * 配置量。
由于这不是与筛选或联接决策有关的列,因此可以放心地忽略它。

相关问题