Краткий ответ на этот вопрос - нет. Хотя вы можете ввести несколько таблиц в from
предложении оператора обновления, вы можете указать только одну таблицу после update
ключевого слова. Даже если вы напишете «обновляемое» представление (которое является просто представлением, которое следует определенным ограничениям), обновления, подобные этому, завершатся неудачно. Вот соответствующие клипы из документации MSDN (акцент мой).
ОБНОВЛЕНИЕ (Transact-SQL)
Представление, на которое ссылается table_or_view_name, должно быть обновляемым и ссылаться только на одну базовую таблицу в предложении FROM представления. Для получения дополнительной информации об обновляемых представлениях см. CREATE VIEW (Transact-SQL).
СОЗДАТЬ ВИД (Transact-SQL)
Вы можете изменить данные базовой базовой таблицы через представление, если выполняются следующие условия:
- Любые модификации, включая операторы UPDATE, INSERT и DELETE, должны ссылаться на столбцы только из одной базовой таблицы .
- Столбцы, изменяемые в представлении, должны напрямую ссылаться на базовые данные в столбцах таблицы. Столбцы не могут быть получены любым другим способом, например, с помощью следующего:
- Агрегирующая функция: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и VARP.
- Вычисление. Столбец не может быть вычислен из выражения, которое использует другие столбцы. Столбцы, которые сформированы с использованием операторов множеств UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT, представляют собой вычисление и также не могут быть обновлены.
- Изменяемые столбцы не зависят от предложений GROUP BY, HAVING или DISTINCT.
- TOP не используется нигде в select_statement представления вместе с предложением WITH CHECK OPTION.
Честно говоря, однако, вы должны рассмотреть возможность использования двух разных операторов SQL в транзакции, как показано в примере Л.Бушкина.
ОБНОВЛЕНИЕ: мое первоначальное утверждение, что вы можете обновить несколько таблиц в обновляемом представлении, было неверным. На SQL Server 2005 и 2012 он выдаст следующую ошибку. Я исправил свой ответ, чтобы отразить это.
Msg 4405, Level 16, State 1, Line 1
View or function 'updatable_view' is not updatable because the modification affects multiple base tables.