2
为什么在联接谓词强制嵌套循环中引用变量?
我碰到这个问题最近,无法在网上找到的任何讨论。 下面的查询 DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; 始终获得嵌套循环计划 尝试通过INNER HASH JOIN或INNER MERGE JOIN提示强制问题会产生以下错误。 由于此查询中定义的提示,查询处理器无法生成查询计划。重新提交查询而不指定任何提示,也无需使用SET FORCEPLAN。 我发现了一种允许使用散列或合并联接的解决方法-将变量包装在一个聚合中。生成的计划的成本大大降低(19.2025比0.261987) DECLARE @S2 VARCHAR(1) = ''; WITH T AS (SELECT …