Frage

Warum muß ich ‚refresh Ansicht‘ Skripte schreiben, und führen sie jedes Mal, wenn ich hinzufügen oder einige Felder zu einer Ansicht bearbeiten?

SQL Server versteht, dass es die Ansicht aktualisieren muss, wenn es in der Phantasie ansichts Editierfenstern in Management Studio bearbeiten, also warum kann es nicht sagen, nur seine Ansicht selbst zu gehen zu aktualisieren, nachdem die Ansicht durch ein Skript zu bearbeiten?

War es hilfreich?

Lösung

Ansichten müssen aktualisiert werden, wenn die zugrunde liegenden Tabellen überhaupt ändern. Das kann die Datentypen der Spalten der Ansicht ändern oder ihre Indizes neu anordnen. Daher muss es wissen. Andernfalls würden Sie eine Abfrage gegen sie laufen, und es würde ziemlich schnell die Luft sprengen.

Sie sollten laufen sp_refreshview nicht für eine Ansicht zu verändern. Nur für die zugrunde liegende Tabellen zu verändern.

Sie bitte auch, verhöhnt nicht glücklich Spaß Ball.

Edit: Habe gerade diesen Code lief (hintereinander), um zu versuchen, Ihr Problem zu reproduzieren. Ich war leider nicht in der Lage zu sein, wie es wie erwartet (SQL Server 2008) gearbeitet:

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

Andere Tipps

Verwenden Sie MIT SCHEMA in der Sichtdefinition die Notwendigkeit zu entfernen für alle Auffrischungen

Und in Kombination mit ALTER VIEW, nicht der Designer

Bearbeiten, Juli 2012, von Link oben. Mein fett

  

SCHEMAB

     

Wird die Sicht auf das Schema der zugrunde liegenden Tabelle oder Tabellen. Wenn SCHEMAB angegeben, wird die Basistabelle oder Tabellen kann nicht auf eine Weise modifiziert werden, dass die Sichtdefinition beeinflussen würde . Die Ansichtsdefinition selbst muss zunächst auf dem Tisch entfernen Abhängigkeiten geändert oder gelöscht werden, die geändert werden soll. Wenn Sie SCHEMAB verwenden, muss der select_statement gehören die zweiteiligen Namen (schema.object) von Tabellen, Ansichten oder benutzerdefinierte Funktionen, die referenziert werden. Alle referenzierten Objekte in derselben Datenbank sein muss.

     

Ansichten oder Tabellen, die in einer Ansicht teilnehmen mit der SCHEMA Klausel erstellt kann nicht gelöscht werden , es sei denn, dass Ansicht gelöscht oder geändert wird, so dass es nicht mehr Schemabindung hat. Andernfalls stellt der Datenbank-Engine einen Fehler. Auch die Ausführung TABLE-Anweisungen für Tabellen ändern, die in Ansichten teilnehmen, das Schema haben die Bindung fehlschlagen , wenn diese Aussagen die Ansicht Definition beeinflussen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top