从 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';
我遇到了问题,需要您的帮助。我想做的是使用 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';