Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server CTE以更新列_Sql_Sql Server_Common Table Expression - Fatal编程技术网

SQL Server CTE以更新列

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

我有两个表,表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
我需要编写一个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中的新值提供别名,然后使用该别名更新该值