10 Stimmen

SQL Server View zeigt veraltete/falsche Daten nach Änderung der zugrunde liegenden Abhängigkeiten

Wir haben eine Ansicht (nennen wir sie X), die die Basisansicht ist, die von 2 anderen Ansichten (nennen wir sie Y und Z) aufgerufen wird.

Heute haben wir eine Änderung an Ansicht X vorgenommen, woraufhin Ansicht Y und Z anfingen, fehlerhafte Daten zu liefern. Als wir in Management Studio waren und SELECT * FROM Y (was genau der Art und Weise entspricht, wie die Ansicht im Code aufgerufen wird), würde es Daten zurückgeben, die falsch sind. Wenn wir jedoch das eigentliche SQL, das die Ansicht enthielt, ausführten, war alles in Ordnung. Wir probierten verschiedene Dinge aus, bis ein Kollege vorschlug, der Ansicht X und Z ein Leerzeichen hinzuzufügen und dann Alter auszuführen, was auch funktionierte. Alles war wieder normal und funktionierte einwandfrei.

Meine Frage ist: Hat MSSQL Zwischenspeicher seine Ansichten? und wenn ja, wie Sie zwingen sie nicht zu ODER zwingen sie neu kompilieren?

Außerdem wäre jede weitere Lektüre zu diesem Thema hilfreich.

13voto

D'Arcy Rittich Punkte 159655

Siehe die sp_refreshview Befehl.

Aktualisiert die Metadaten für die angegebene nicht schemagebundene Sicht. Persistente Metadaten für eine Sicht können aufgrund von Änderungen an den zugrundeliegenden Objekten, von denen die Sicht abhängt, veralten.

8voto

Mitch Wheat Punkte 287474

SQL Server zwischenspeichert keine Ansichtsdaten (zumindest nicht in der Art und Weise, wie Sie sich darauf beziehen).

Wenn eine View-Definition "SELECT *" enthält, wird die tatsächliche Spaltenliste bei der Erstellung des Views definiert, d.h. das "SELECT *" wird durch die tatsächliche Spaltenliste ersetzt, die zum Zeitpunkt der Erstellung des Views existiert. Das heißt, wenn Sie Spalten zu darunter liegenden Tabellen hinzufügen, auf die diese Ansicht verweist, werden diese nicht in der Ansicht angezeigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X