Обновление нескольких таблиц в 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

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