La réponse courte à cette question est non. Bien que vous puissiez saisir plusieurs tableaux dans le from
d'une instruction de mise à jour, vous ne pouvez spécifier qu'une seule table après la clause update
mot-clé. Même si vous écrivez une vue "actualisable" (qui est simplement une vue qui suit certaines restrictions), les mises à jour comme celle-ci échoueront. Voici les extraits pertinents de la documentation MSDN (c'est moi qui souligne).
UPDATE (Transact-SQL)
La vue référencée par table_ou_nom_de_la_vue doit pouvoir être mise à jour et référencée exactement une table de base dans la clause FROM de la vue. Pour plus d'informations sur les vues actualisables, voir CREATE VIEW (Transact-SQL).
CREATE VIEW (Transact-SQL)
Vous pouvez modifier les données d'une table de base sous-jacente par le biais d'une vue, pour autant que les conditions suivantes soient remplies :
- Toute modification, y compris les instructions UPDATE, INSERT et DELETE, doit faire référence à des colonnes provenant de une seule table de base .
- Les colonnes modifiées dans la vue doivent faire directement référence aux données sous-jacentes dans les colonnes de la table. Les colonnes ne peuvent pas être dérivées d'une autre manière, par exemple par le biais de ce qui suit :
- Une fonction d'agrégation : AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR et VARP.
- Un calcul. La colonne ne peut pas être calculée à partir d'une expression qui utilise d'autres colonnes. Les colonnes formées à l'aide des opérateurs d'ensemble UNION, UNION ALL, CROSSJOIN, EXCEPT et INTERSECT équivalent à un calcul et ne peuvent pas non plus être mises à jour.
- Les colonnes en cours de modification ne sont pas affectées par les clauses GROUP BY, HAVING ou DISTINCT.
- TOP n'est utilisé nulle part dans l'instruction select_statement de la vue avec la clause WITH CHECK OPTION.
En toute honnêteté, cependant, vous devriez envisager d'utiliser deux instructions SQL différentes dans une transaction, comme dans l'exemple de LBushkin.
UPDATE : Mon affirmation initiale selon laquelle vous pouviez mettre à jour plusieurs tables dans une vue actualisable était fausse. Sur SQL Server 2005 et 2012, cela génère l'erreur suivante. J'ai corrigé ma réponse pour refléter cela.
Msg 4405, Level 16, State 1, Line 1
View or function 'updatable_view' is not updatable because the modification affects multiple base tables.
4 votes
Il serait utile que vous expliquiez pourquoi.
2 votes
J'ai bien peur que le serveur SQL 2005 ne supporte pas la mise à jour de plusieurs tables en une seule requête.
0 votes
stackoverflow.com/questions/24018535/