从 CTE 更新但无法绑定多部分标识符

Update from CTE but the multi-part identifier could not be bound

我遇到了问题,需要您的帮助。我想做的是使用 CTE 更新一个值。

我使用以下脚本创建了我的 CTE:

;WITH CTE AS
(
    SELECT TOP 1 
        TABLE1.objectid AS [carrier_object_id], cardNo 
    FROM 
        TABLE1
    INNER JOIN 
        TABLE2 ON TABLE1.objectid = TABLE2.carrierobjectid
    ORDER BY 
        cardNo DESC
)

之后,我尝试使用如下更新查询编写更新:

UPDATE [db].[dbo].[freefieldassignment]
SET [db].[dbo].[freefieldassignment].value = CAST((CTE3.cardNo) + 1 AS VARCHAR(300))
WHERE [db].[dbo].[freefieldassignment].[carrierobjectid] = '90465607'

如您所见,我正在尝试将 cte 的值设置为 freefiledassignment.value,但在执行脚本时弹出错误消息:

The multi-part identifier "CTE.cardNo" could not be bound.

任何人都可以告诉我在这种情况下我遗漏了什么,因为我试图弄清楚但我做不到。谢谢你的时间。

您必须 加入 WITH CTE :

UPDATE A
      SET A.value = CAST(C.cardNo + 1 AS varchar(300))
FROM [db].[dbo].[freefieldassignment] A INNER JOIN
     CTE C
     ON C.<COL> = A.<COL>
WHERE A.[carrierobjectid] = '90465607';

但是,如果你想设置通用值(return by cte)那么你也可以使用 variable :

DECLARE @cardNo VARCHAR(255)

SELECT TOP (1) @cardNo = cardNo 
FROM TABLE1 INNER JOIN 
     TABLE2 
     ON TABLE1.objectid = TABLE2.carrierobjectid
ORDER BY cardNo DESC;

UPDATE A
      SET A.value = CAST(@cardNo + 1 AS varchar(300))
FROM [db].[dbo].[freefieldassignment] A 
WHERE A.[carrierobjectid] = '90465607';