Tsql 使用CTE使用另一个表中的行更新表

Tsql 使用CTE使用另一个表中的行更新表,tsql,sql-server-2012,common-table-expression,Tsql,Sql Server 2012,Common Table Expression,我需要使用a_solarTypeDB.dbo.spaceList中同一列的值更新B_solarTypeDB.dbo.spaceList中所有行中的列 我在下面有一个CTE,它从A_solarTypeDB.dbo.spaceList返回不在B_solarTypeDB.dbo.spaceList中的所有星体值 有没有办法用这些值更新B_solarTypeDB.dbo.spaceList 以下是我对CTE的尝试: UPDATE B_solarTypeDB.dbo.spaceList SET astro

我需要使用a_solarTypeDB.dbo.spaceList中同一列的值更新B_solarTypeDB.dbo.spaceList中所有行中的列

我在下面有一个CTE,它从A_solarTypeDB.dbo.spaceList返回不在B_solarTypeDB.dbo.spaceList中的所有星体值

有没有办法用这些值更新B_solarTypeDB.dbo.spaceList

以下是我对CTE的尝试:

UPDATE B_solarTypeDB.dbo.spaceList
SET astroID = 
;WITH CTE AS
(
    SELECT astroID FROM A_solarTypeDB.dbo.spaceList
    EXCEPT
    SELECT astroID FROM B_solarTypeDB.dbo.spaceList
)
SELECT astroID 
FROM A_solarTypeDB.dbo.spaceList
WHERE astroID IN (SELECT astroID FROM CTE)
但我在“;”附近发现了一个语法错误

以下是来自A_solarTypeDB.dbo.spaceList的示例数据:

spaceID     spaceName    typeID     astroID
2937        Mars         1          9481ffg1
2938        Titan        3          4728ffu3
2939        MG1          7          4937fft5
我需要对B_solarTypeDB.dbo.spaceList进行更新,因为有时astroID的值为NULL,而它应该与A_solarTypeDB数据库中的值相同


谢谢

您可以在没有CTE的情况下完成此操作,如:

    UPDATE typeBdb.dbo.spaceList
    SET astroID = T2.astroID
    FROM
    (
       SELECT astroID,CommonUniqueID
       FROM typeAdb.dbo.spaceList
       WHERE astroID IN 
       (
            SELECT astroID 
            FROM (
                        
                    SELECT astroID FROM typeAdb.dbo.spaceList
                    EXCEPT
                    SELECT astroID FROM typeBdb.dbo.spaceList
                    
               ) T1
    
       )
    ) T2
   WHERE typeBdb.dbo.spaceList.CommonUniqueID = T2.CommonUniqueID

确切的更新逻辑是什么?@TimBiegeleisen谢谢,我忘了包括这个。我已经更新了原始问题,以显示我尝试的
UPDATE
命令和结果错误。示例数据将非常有用。@TimBiegeleisen好主意…:)完成!您正在使用CTE,就好像它是一个查询一样。将CTE视为总是出现在查询本身之前的子查询。查询本身应该以myCTE为{}UPDATE的
开头,将typeBdb.dbo.spaceList中的星形线设置为每行中相同的ID。如果typeBdb.dbo.spaceList中有一个公共字段可以与typeAdb.dbo.spaceList匹配,则可以在末尾添加WHERE子句进行匹配。我已经更新了上面的查询,以显示这是如何工作的。