Обновление нескольких таблиц в SQL Server с помощью INNER JOIN
Я использую SQL Server и пытаюсь использовать SQL для одновременного обновления нескольких таблиц одним запросом:
Следующий запрос:
update table1
set A.ORG_NAME = @ORG_NAME, B.REF_NAME = @REF_NAME
from table1 A, table2 B
where B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
Дает сообщение об ошибке:
Идентификатор с несколькими частями "A.ORG_NAME" не может быть связан.
Что означает сообщение об ошибке?
Ответы
Ответ 1
Вы не можете обновить больше одной таблицы в одном документе, однако сообщение об ошибке, которое вы получаете, связано с псевдонимами, вы можете попробовать следующее:
BEGIN TRANSACTION
update A
set A.ORG_NAME = @ORG_NAME
from table1 A inner join table2 B
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
update B
set B.REF_NAME = @REF_NAME
from table2 B inner join table1 A
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
COMMIT
Ответ 2
Вы можете обновить соединение, если вы затрагиваете только одну таблицу:
UPDATE table1
SET table1.name = table2.name
FROM table1, table2
WHERE table1.id = table2.id
AND table2.foobar ='stuff'
Но вы пытаетесь повлиять на несколько таблиц с инструкцией по обновлению, которая объединяется в несколько таблиц. Это невозможно.
Тем не менее, обновление двух таблиц в одном из операторов действительно возможно, но необходимо будет создать представление с помощью UNION, содержащего обе таблицы, которые вы хотите обновить. Затем вы можете обновить представление, которое затем обновит базовые таблицы.
SQL JOINS
Но это действительно хитроумный трюк, использование транзакции и несколько обновлений, это гораздо более интуитивно понятное.