web-dev-qa-db-fra.com

Les vues sont-elles automatiquement mises à jour

Si je JOIN ou CROSS APPLY deux tables et créer un VIEW, la vue est-elle automatiquement mise à jour lorsque je mets à jour l'une des deux tables ou que j'ajoute des enregistrements à l'une d'entre elles?

Ces nouveaux enregistrements apparaîtront-ils dans le VIEW?

46
Hammad Khan

Oui, ils sont mis à jour chaque fois que vous les utilisez.

Je pense que Microsoft résume clairement ce qu'est une vue:

Une vue peut être considérée comme une table virtuelle ou une requête stockée.

http://msdn.Microsoft.com/en-us/library/aa214068%28v=sql.80%29.aspx

Les vues ne sont pas automatiquement mises en cache.

Lorsque vous SELECT à partir d'une vue, la base de données doit exécuter la requête stockée dans la vue pour obtenir le jeu de résultats à utiliser dans votre instruction

Les données que vous "voyez" dans une vue ne sont en fait stockées nulle part et sont générées à partir des tables à la volée.

Pour cette raison, faites attention aux vues qui sont très complexes. Tenez toujours compte du fait que la vue devra être exécutée avant d'accéder à son jeu de résultats.

54
Curt

Une vue est fondamentalement une requête stockée, elle ne contient aucune donnée, donc non, elle ne sera pas mise à jour lorsque les tables sur lesquelles elle est construite le sont. Cependant, dès que vous référencez la vue, la requête sur laquelle elle est basée s'exécute, vous verrez donc les modifications apportées aux tables de base.

11
OTTA

Oui, une vue est une requête SELECT sur des tables/vues sous-jacentes. Si vous modifiez des données dans les tables sous-jacentes et si cette plage est incluse dans la définition de la vue, vous verrez les données modifiées.

5
user596075

Oui, les enregistrements seront mis à jour à chaque fois.

Mais si vous modifiez la définition de la table. N'oubliez pas de voir refresh.

exec sp_refreshview @viewname

N'utilisez pas SELECT * dans la définition de la vue, utilisez plutôt column name

3
yogen darji

En ajoutant simplement à la réponse de @ Curt, si la mise à jour que vous avez apportée aux tables sous-jacentes ajoute ou supprime des données, la vue est automatiquement mise à jour avec les nouvelles données. Si vous ajoutez ou supprimez les colonnes des tables sous-jacentes (essentiellement la définition de la vue), vous devez exécuter sp_RefreshView procédure stockée pour refléter le nouveau schéma dans votre vue.

2
Programmerzzz