Question

Pourquoi dois-je écrire des scripts « afficher refresh » , et les exécuter à chaque fois que j'ajouter ou modifier des champs à une vue?

SQL Server comprend qu'il doit rafraîchir la vue lors de l'édition dans les fenêtres de vue-modifier fantaisie dans Management Studio, alors pourquoi ne pas juste dire son point de vue d'aller se rafraîchir après avoir modifié la vue à travers un script?

Était-ce utile?

La solution

Vues doivent être rafraîchi si les tables sous-jacentes changent du tout. Cela peut modifier les types de données des colonnes de la vue ou de réorganiser ses index. Par conséquent, il a besoin de savoir. Dans le cas contraire, vous souhaitez exécuter une requête contre elle, et ce serait sauter assez rapidement.

Vous ne devriez pas avoir à courir sp_refreshview pour modifier une vue. Seulement pour modifier ses tables sous-jacentes.

En outre, s'il vous plaît ne pas narguer boule fun heureux.

Edit: Je viens de croiser ce code (successivement) pour tenter de reproduire votre problème. J'étais, malheureusement, incapable, comme cela a fonctionné comme prévu (SQL Server 2008):

create view MyView
as
select ProductKey, ProductID, ProductName, Price
from dbo.Products

select v.* from MyView v

alter view MyView
as
select ProductKey, ProductID, ProductName, Price*100 as MyPrice
from dbo. Products

select v.* from MyView v

Autres conseils

Utilisez AVEC SCHEMABINDING dans la définition de la vue de supprimer la nécessité pour toutes les actualisations

Et en combinaison avec ALTER VIEW, pas le concepteur

Modifier, jul 2012, de lien ci-dessus. Mon gras

  

SCHEMABINDING

     

Associe la vue au schéma de la table sous-jacente ou des tables. Lorsque SCHEMABINDING est spécifié, la table de base ou tables ne peuvent pas être modifiés d'une manière qui aurait une incidence sur la définition de la vue . La définition de la vue elle-même doit d'abord être modifié ou abandonné pour supprimer les dépendances sur la table qui doit être modifié. Lorsque vous utilisez SCHEMABINDING, instruction_select doit inclure les noms de deux parties (schema.object) des tables, des vues ou des fonctions définies par l'utilisateur qui sont référencés. Tous les objets référencés doivent être dans la même base de données.

     

Vues ou tables qui participent à une vue créée avec la clause SCHEMABINDING ne peuvent être supprimées à moins que ce point de vue est tombé ou changé de sorte qu'il n'a plus la liaison de schéma. Dans le cas contraire, le moteur de base de données génère une erreur. En outre, l'exécution de ALTER TABLE sur les tables qui participent à des vues qui ont la liaison de schéma échouent lorsque ces déclarations influent sur la définition de la vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top