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