0
SELECT 
    tchart.* 
INTO 
    #OrderSections 
FROM 
    Order.Charts tchart 
INNER JOIN 
    (
    SELECT 
     tchart.ID, 
     tchart.ORCode, 
     tchart.SectionalDistance, 
     row_number() OVER(PARTITION BY rrs.ORCode ORDER BY tchart.VendorTimestampUTC DESC, tchart.InsertedTimestampUTC DESC, tchart.ID DESC) AS RecordIndex 
    FROM 
     #OrderStaging rrs 
    INNER JOIN 
     Order.Charts tchart 
    ON 
     rrs.ORCode = tchart.ORCode 
    ) AS Latest_tchart 
ON 
    tchart.ID = Latest_tchart.ID 
WHERE 
    Latest_tchart.RecordIndex = 1; 

With cte as( 
    SELECT 
     tchart.ID, 
     tchart.ORCode, 
     tchart.SectionalDistance, 
     row_number() OVER(PARTITION BY rrs.ORCode ORDER BY tchart.VendorTimestampUTC DESC, tchart.InsertedTimestampUTC DESC, tchart.ID DESC) AS RecordIndex 
    FROM 
     #OrderStaging rrs 
    INNER JOIN 
     Order.Charts tchart 
    ON 
     rrs.ORCode = tchart.ORCode) 
    SELECT 
     cte.* 
    INTO 
     #OrderSections 
    FROM 
     cte 
    WHERE 
     RecordIndex = 1 

请问CTE有很大的影响特别?何时在存储过程中使用CTE在存储过程

回答

1

要回答关于性能和执行计划的问题,您应该查看针对您的查询的特定计划。

但是,我希望查询具有相同的执行计划,而不管逻辑是在子查询还是CTE中。这在SQL Server中是正确的,但不是其他数据库。例如,Postgres实现了CTE,所以你会期望性能有所不同。

编辑:都需要分层查询(递归的CTE)

的CTE。对于其他查询,它们很方便 - 而且可以非常方便,因为您可以在同一个查询中多次引用CTE。但是,它们对SQL Server中的执行计划没有特定的影响。 CTE被替换为查询并且整个处理被优化为一次。

+0

当CTE会很重要吗? – 2014-09-01 03:27:16