2013-12-13 29 views
-1

我運行了這個查詢來更新臨時表CTE_Companies並更新了原來的Companies表。我現在應該怎麼辦:(我更新了臨時表,它更新了原始表MSSQL服務器

with CTE_Companies 
(ZIP) 
As 
(
Select ZIP from Companies 
) 

Update CTE_Companies 
set CTE_Companies.ZIP= '0'+CTE_Companies.ZIP 
where len(CTE_Companies.ZIP) = 4 
+3

獲取最後一次備份... –

回答

3

共表表達式不是一個臨時表。它更像一個或多個表的子查詢。如果你從一個表中選擇,那麼你會及時更新表。

這是由設計非常有用,因爲你可以改變Update/DeleteSelect容易看到你要更改或刪除。所以,你應該包括在CTEWhere條件是什麼。

0

無法更新表格表達式基表。 使用臨時表。

0
BEGIN TRAN 

WITH CTE_Companies 
(ZIP) 
As 
(
Select ZIP from Companies 
) 

Update CTE_Companies 
set CTE_Companies.ZIP= SUBSTRING (1, CTE_Companies.ZIP, LEN(CTE_Companies.ZIP) - 1) 
where 
    len(CTE_Companies.ZIP) = 5 
    and CTE_Companies.ZIP LIKE '0%' 


-- check if your data is ok and then change the next line to COMMIT TRAN  
ROLLBACK TRAN