Как ОБНОВИТЬ / УСТАНОВИТЬ внутри функции

Это часть моего кода внутри табличной функции:

DECLARE @Temp1 table (tempid int not null, tasknr varchar(50) null, devcat varchar(50) null, taskop datetime null, taskcl datetime null)
(...)
DECLARE @Temp1a table (tempid int, tasknr nvarchar(50), cat nvarchar (50), taskop datetime, taskcl datetime)
(...)

UPDATE
        @Temp1
    SET 
        @Temp1.tasknr = @Temp1a.tasknr,
        @Temp1.devcat = @Temp1a.devcat,
        @Temp1.taskop = @Temp1a.taskop,
        @Temp1.taskcl = @Temp1a.taskcl
    FROM
        @Temp1a
    INNER JOIN
        @Temp1
    ON
        @Temp1.tempid = @Temp1a.tempid

Мне нужно иметь возможность ОБНОВЛЯТЬ значения из одной таблицы, используя значения из другой таблицы.

Но я получаю ошибку

Необходимо объявить скалярную переменную "@Temp1a".

а также

Неверный синтаксис рядом с '.'.

Как я могу сделать эту работу?

2 ответа

Решение
UPDATE
    t
SET 
    tasknr = a.tasknr,
    devcat = a.devcat,
    taskop = a.taskop,
    taskcl = a.taskcl
FROM
    @Temp1a a
INNER JOIN
    @Temp1 t
ON
    t.tempid = a.tempid

Проблема в том, что вам нужны псевдонимы. @ недопустимо для ссылки на таблицу:

UPDATE t1
SET 
    tasknr = t1a.tasknr,
    devcat = t1a.devcat,
    taskop = t1a.taskop,
    taskcl = t1a.taskcl
FROM @Temp1a t1a INNER JOIN
     @Temp1 t1
     ON t1.tempid = t1a.tempid;

Кроме того, SQL Server не позволяет использовать имена таблиц для переменной в set,

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