2013-12-13 28 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