解决方法
它们似乎没有,但这实际上只适用于嵌套的CTE.
创建两个临时表:
CREATE TABLE #t1 (id INT); INSERT #t1 ( id ) VALUES ( 1 ); CREATE TABLE #t2 (id INT); INSERT #t2 ( id ) VALUES ( 1 );
查询1:
WITH your_mom AS ( SELECT TOP 1 * FROM #t1 AS t ),also_your_mom AS ( SELECT TOP 1 * FROM #t2 AS t ) SELECT * FROM your_mom;
查询2:
WITH your_mom AS ( SELECT TOP 1 * FROM #t1 AS t ),also_your_mom AS ( SELECT TOP 1 * FROM #t2 AS t ) SELECT * FROM also_your_mom;
查询计划:
有一个开销,但查询的不必要部分很早就消除了(在这种情况下解析期间;在更复杂的情况下的简化阶段),因此额外的工作真的是最小的,并且不会导致潜在的昂贵的基于成本的优化.