Обновление из CTE, но не удалось связать идентификатор из нескольких частей - PullRequest
0 голосов
/ 22 февраля 2019

У меня возникла проблема, и мне нужна ваша помощь.Я пытаюсь обновить значение, используя 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, но при выполнении скрипта появляется ошибка:

Не удалось связать многоэлементный идентификатор "CTE.cardNo".

Может кто-нибудь сказать мне, что мне не хватает в этой ситуации, потому что я пытаюсь понять этоно я не могу.Спасибо за ваше время.

1 Ответ

0 голосов
/ 22 февраля 2019

Вы должны сделать присоединиться С 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';

Однако, если вы хотите установить общее значение (возврат по 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';
...