Короткий ответ на этот вопрос - нет. Хотя вы можете ввести несколько таблиц в предложении from
оператора обновления, вы можете указать только одну таблицу после ключевого слова update
. Даже если вы напишете «обновляемое» представление (которое является просто представлением, которое следует определенным ограничениям), обновления, подобные этому, не будут выполнены. Вот соответствующие клипы из документации MSDN (выделено мое).
ОБНОВЛЕНИЕ (Transact-SQL)
Представление, на которое ссылается table_or_view_name, должно быть обновляемым и ссылаться на ровно на одну базовую таблицу в предложении FROM представления. Для получения дополнительной информации об обновляемых представлениях см. CREATE VIEW (Transact-SQL).
CREATE VIEW (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.