2010-04-15 9 views

Répondre

22

voir Using Views in Microsoft SQL Server

Lors de la modification des données à travers une vue (qui est, à l'aide des commandes INSERT ou UPDATE ) certaines limitations existent selon le type de vue. Les vues qui accèdent à plusieurs tables ne peuvent modifier que l'une des tables de la vue en . Les vues qui utilisent des fonctions, spécifient DISTINCT ou utilisent la clause GROUP BY peuvent ne pas être mises à jour. De plus, l'insertion de données est interdite pour les types de vues suivantes:

* views having columns with derived (i.e., computed) data in the SELECT-list 
* views that do not contain all columns defined as NOT NULL from the tables from which they were defined 

Il est également possible d'insérer ou données de mise à jour avec une vue telle que les données ne sont plus accessibles via ce point de vue, sauf si l'option WITH CHECK a été spécifiée.

+0

Il y a tellement de mises en garde sur l'insertion dans une vue, que je trouve personnellement plus simple d'insérer directement aux tables. Après tout, vous devez toujours rechercher quels champs vont à quelle table afin de se conformer aux règles et si vous savez qu'il n'y a aucune raison de ne pas directement mettre à jour ou insérer la table. – HLGEM

+0

Je n'ai jamais fait de mise à jour ou d'INSERT sur une vue, mais cela pourrait vous être utile si vous avez une vue indexée que vous pouvez utiliser pour localiser rapidement les lignes qui ont besoin d'être modifiées. Dans ce cas, je construirais la vue dans le seul but de la mise à jour. –

12

Oui.

Les données "dans" une vue n'ont aucune existence indépendante des tables qui constituent la vue. La vue est, en substance, une instruction SELECT stockée qui se masque en tant que table. Les données sont stockées dans les tables d'origine et seulement "assemblées" dans la vue lorsque vous voulez le regarder. Si la vue peut être mise à jour (toutes les vues ne le sont pas), les mises à jour sont appliquées aux données de la table.

+0

Je comprends votre point de vue. Mais une nouvelle question se pose, si la vue n'est qu'une sélection, puis comment les index sont conservés sur une vue. Tous les index sont-ils reconstruits dès que quelqu'un interroge une vue? –

+1

Il n'y a aucun index sur les vues, uniquement sur les tables sous-jacentes. Les index sont utilisés par le SGBD pour assembler les lignes des différentes tables lorsque vous demandez des données à partir de la vue. (Ceci ignore un type de vue assez nouveau, la "vue matérialisée" dans laquelle la base de données stocke une copie "d'ombre" des données, pré-calculant effectivement la vue pour vous). –

5

Vous pouvez utiliser un déclencheur sur la vue pour insérer/mettre à jour/supprimer les tables réelles.

http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/

+4

J'apprécie les commentaires sur ma réponse, mais si c'est négatif, pourquoi personne ne fait de commentaire? Je voudrais être corrigé si je me trompe. –

+4

La question porte explicitement sur les effets de la mise à jour d'une vue. Proposer des alternatives est super et tout, mais cela ne répond pas à la question. – Dan