SQL Server CTE以更新列
我有两个表,表1和表2的结构如下 表1:SQL Server CTE以更新列,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,我有两个表,表1和表2的结构如下 表1: ID Location Date ---------------------------- 1 abc 2014-6-3 2 xyz 2013-6-5 表2: ID Location Date ---------------------- 1 abc NULL 2 xyz NULL 3 hgf 2012-9-8
ID Location Date
----------------------------
1 abc 2014-6-3
2 xyz 2013-6-5
表2:
ID Location Date
----------------------
1 abc NULL
2 xyz NULL
3 hgf 2012-9-8
我需要编写一个CTE,根据条件更新Table2.Date
列,其中table1.location=Table2.location
有人能帮我一下吗?因为我对CTE的概念非常陌生您可以给CTE中的新值指定一个别名,然后使用该别名更新该值:
WITH cte AS
(
SELECT
t2.Date
,t1.Date AS NewDate
FROM #Table1 t1
JOIN #Table2 t2
ON t1.Location=t2.Location
)
UPDATE cte
SET Date=NewDate;
即使没有CTE,您也可以这样做,如下所示:
UPDATE TABLE2 T2
SET
T2.DATE = (SELECT T1.DATE FROM TABLE1 T1 WHERE T1.LOCATION = T2.LOCATION)
WHERE T2.DATE IS NOT NULL
为什么你需要一个CTE?据我所知,这可以通过的
更新…来完成。因为它是递归的,我需要更新GO中的几个值。您可以为cte中的新值提供别名,然后使用该别名更新该值