ОБНОВЛЕНИЕ таблицы через объединение в SQL

Я пытаюсь нормализовать свои таблицы, чтобы сделать БД более эффективной.

Для этого я удалил несколько столбцов из таблицы, для которой обновлял несколько столбцов.

Вот оригинальный запрос, когда все столбцы были в таблице:

UPDATE myActDataBaselDataTable 
set [Correct Arrears 2]=(case when [Maturity Date]='' then 0 else datediff(d,convert(datetime,@DataDate, 102),convert(datetime,[Maturity Date],102)) end)
from myActDataBaselDataTable

Теперь я удалил [Maturity Date] из таблицы myActDataBaselDataTable, и необходимо извлечь этот столбец из базовой справочной таблицы ACTData где это называется Mat,

В моей таблице myActDataBaselDataTable поле Номер счета представляет собой объединение 3 полей в ACTData, таким образом,

myActDataBaselDataTable.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]

(где ac - псевдоним для ACTData)

Итак, взглянув на ответы, приведенные в других разделах SO (например, /questions/24959751/obnovit-tablitsu-s-pomoschyu-join-v-sql-server), я попытался изменить этот конкретный оператор обновления, как показано ниже, но я не могу сделать это правильно:

UPDATE myActDataBaselDataTable 
set dt.[Correct Arrears 2]=(
    case when ac.[Mat]='' 
        then 0 
        else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,ac.[Mat],102))
    end)
from ACTData ac 
inner join myActDataBaselDataTable  dt
    ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]    

Я либо получаю Incorrect syntax near 'From' ошибка, или The multi-part identifier "dt.Correct Arrears 2" could not be bound.

Я был бы признателен за любые рекомендации о том, как сделать это правильно, или suugestiopns о том, как сделать это лучше.

Спасибо

РЕДАКТИРОВАТЬ:

Кстати, когда я запускаю ниже, как SELECT, он возвращает данные без ошибок:

select case when [ac].[Mat]='' 
            then 0 
                else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,[ac].[Mat],102))
        end
        from ACTData ac 
    inner join myActDataBaselDataTable  dt
        ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]

1 ответ

Решение

В обновлении объединения обновите псевдоним

update dt

Что сбивает с толку то, что в более поздних версиях SQL вам не нужно использовать псевдоним в строке обновления

Другие вопросы по тегам