2010-04-15 8 views

Antwort

22

siehe Using Views in Microsoft SQL Server

Wenn Daten über eine Sicht Modifizieren (das heißt, INSERT oder UPDATE Anweisungen) bestimmte Beschränkungen existieren in Abhängigkeit von der Art der Ansicht. Ansichten , die Zugriff auf mehrere Tabellen können nur eine der Tabellen in der Ansicht ändern. Ansichten, die Funktionen verwenden, DISTINCT angeben oder die Klausel GROUP BY verwenden, werden möglicherweise nicht aktualisiert. Zusätzlich Einfügen von Daten ist für die folgenden Arten von Ansichten verboten:

* 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 

Es ist auch möglich, eine Ansicht einzufügen oder Datenaktualisierung durch, so dass die Daten nicht mehr über zugänglich sind, die anzeigen, es sei denn, WITH CHECK OPTION wurde angegeben.

+0

Es gibt so viele Einschränkungen auf über eine Sicht einfügen, dass ich es persönlich einfacher finden direkt in den Tabellen einzufügen. Schließlich müssen Sie noch nachsehen, welche Felder zu welcher Tabelle gehören, um die Regeln einzuhalten, und wenn Sie wissen, dass es keinen Grund gibt, die Tabelle nicht direkt zu aktualisieren oder einzufügen. – HLGEM

+0

Ich habe noch nie ein UPDATE oder INSERT für eine Ansicht durchgeführt, aber es könnte von Vorteil sein, wenn Sie über eine indizierte Sicht verfügen, mit der Sie schnell die Zeilen finden können, die die Änderung benötigen. In diesem Fall würde ich die Ansicht nur zum Zweck der Aktualisierung erstellen. –

12

Ja.

Die Daten "in" einer Ansicht haben keine Existenz unabhängig von den Tabellen, die die Ansicht bilden. Die Ansicht ist im Wesentlichen eine gespeicherte SELECT-Anweisung, die sich als Tabelle tarnt. Die Daten werden in den Originaltabellen gespeichert und nur in der Ansicht "zusammengefügt", wenn Sie sie betrachten möchten. Wenn die Ansicht aktualisierbar ist (nicht alle Ansichten), werden die Aktualisierungen auf die Tabellendaten angewendet.

+0

Ich verstehe Ihren Standpunkt. Es stellt sich jedoch eine neue Frage: Wenn die Sicht nur eine Select-Anweisung ist, dann werden die Indizes in einer Ansicht verwaltet. Werden alle Indizes neu erstellt, sobald jemand eine Ansicht abfragt? –

+1

Es gibt keine Indizes für Sichten, nur für die zugrunde liegenden Tabellen. Die Indizes werden vom DBMS zum Zusammenstellen der Zeilen aus den verschiedenen Tabellen verwendet, wenn Sie Daten von der Ansicht anfordern. (Dies ignoriert eine ziemlich neue Art von Ansicht, die "materialisierte Ansicht", in der die Datenbank eine "Schattenkopie" der Daten speichert, die die Ansicht für Sie effektiv vorberechnet). –

5

Sie können einen Trigger für die Ansicht verwenden, um die tatsächlichen Tabellen einzufügen, zu aktualisieren oder zu löschen.

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

+4

Ich freue mich über Feedback zu meiner Antwort, aber wenn es negativ ist, warum kommt niemand dazu? Ich würde gerne korrigiert werden, wenn es falsch ist. –

+4

Die Frage fragt explizit nach den Auswirkungen der Aktualisierung einer Ansicht. Alternativen vorschlagen ist großartig und alles, aber es beantwortet die Frage nicht. – Dan

Verwandte Themen