Entwerfen und Implementieren von Sichten

Vor dem Erstellen einer Sicht sollten Sie sich mit den folgenden Richtlinien vertraut machen:

  • Sichten können nur in der aktuellen Datenbank erstellt werden. Die Tabellen und Sichten, auf die die neue Sicht verweist, können sich jedoch in anderen Datenbanken oder sogar auf anderen Servern befinden, wenn die Sicht mithilfe verteilter Abfragen definiert wurde.

  • Die Namen von Sichten müssen den Regeln für Bezeichner entsprechen und für jedes Schema eindeutig sein. Außerdem darf für eine Sicht nicht derselbe Name wie für eine der Tabellen verwendet werden, die im betreffenden Schema enthalten ist.

  • Sichten können auf der Grundlage von anderen Sichten erstellt werden. Microsoft SQL Server ermöglicht das Schachteln von Sichten.Die Schachtelung darf maximal 32 Ebenen umfassen. Die tatsächliche Beschränkung bei der Schachtelung von Sichten kann abhängig von der Komplexität einer Sicht und dem verfügbaren Arbeitsspeicher auch niedriger sein.

  • Sichten können keine Regeln oder DEFAULT-Definitionen zugeordnet werden.

  • Sichten können keine AFTER-Trigger, sondern nur INSTEAD OF-Trigger zugeordnet werden.

  • Die Abfrage, die die Sicht definiert, darf nicht die COMPUTE- und COMPUTE BY-Klauseln oder das INTO-Schlüsselwort enthalten.

  • Die Abfrage, die die Sicht definiert, darf keine ORDER BY-Klausel enthalten, wenn nicht auch eine TOP-Klausel in der Auswahlliste der SELECT-Anweisung vorhanden ist.

  • Die Abfrage, die die Sicht definiert, darf keine OPTION-Klausel enthalten, die einen Abfragehinweis angibt.

  • Die Abfrage, die die Sicht definiert, darf keine TABLESAMPLE-Klausel enthalten.

  • Für Sichten können keine Volltextindexdefinitionen definiert werden.

  • Das Erstellen temporärer Sichten oder das Erstellen von Sichten auf der Basis temporärer Tabellen ist nicht möglich.

  • Sichten, Tabellen oder Funktionen, die Bestandteil einer mit der SCHEMABINDING-Klausel erstellten Sicht sind, können erst dann gelöscht werden, wenn die entsprechende Sicht gelöscht oder geändert wird, sodass die Schemabindung nicht mehr vorhanden ist. Darüber hinaus werden Fehler für ALTER TABLE-Anweisungen für Tabellen erzeugt, die Bestandteil von Sichten mit Schemabindung sind, falls diese Anweisungen die Sichtdefinition betreffen.

  • Wird eine Sicht nicht mithilfe der SCHEMABINDING-Klausel erstellt, sollte sp_refreshview ausgeführt werden, wenn Änderungen an den der Sicht zugrunde liegenden Objekten vorgenommen werden, die sich auf die Definition der Sicht auswirken. Andernfalls kann die Sicht bei einer Abfrage unerwartete Ergebnisse generieren.

  • Sie können keine Volltextabfragen auf einer Sicht ausführen, obwohl eine Sichtdefinition eine Volltextabfrage einschließen kann, wenn die Abfrage auf eine Tabelle verweist, die für die Volltextindizierung konfiguriert wurde.

  • Unter den folgenden Bedingungen muss für jede Spalte in der Sicht ein Name angegeben werden:

    • Spalten in der Sicht sind aus einem arithmetischen Ausdruck, einer integrierten Funktion oder einer Konstanten abgeleitet.

    • Zwei oder mehr Spalten der Sicht würden anderenfalls denselben Namen aufweisen (in den meisten Fällen, weil die Definition der Sicht eine Verknüpfung enthält und die Spalten aus zwei oder mehr unterschiedlichen Tabellen denselben Namen aufweisen).

    • Eine Spalte in der Sicht sollte einen anderen Namen erhalten als die Spalte, von der sie abgeleitet ist. (Spalten können in der Sicht auch umbenannt werden.) Unabhängig davon, ob eine Spalte in der Sicht umbenannt wird, erbt sie in jedem Fall den Datentyp der Spalte, von der sie abgeleitet ist.

      HinweisHinweis

      Die Regel gilt nicht, wenn eine Sicht auf einer Abfrage aufbaut, die eine äußere Verknüpfung enthält, da Spalten, die keine NULL-Werte zulassen, geändert werden können, sodass sie anschließend NULL-Werte zulassen.

      Sofern keine der zuvor aufgeführten Bedingungen zutrifft, ist das Angeben von Spaltennamen beim Erstellen einer Sicht nicht notwendig. SQL Server weist den Spalten der Sicht die Namen und Datentypen der Spalten zu, auf die in der die Sicht definierenden Abfrage verwiesen wird. Die Auswahlliste kann aus einer vollständigen oder teilweisen Auflistung der in den Basistabellen enthaltenen Spaltennamen bestehen.

Damit Sie eine Sicht erstellen können, muss Ihnen die entsprechende Berechtigung vom Datenbankbesitzer erteilt werden. Wird die Sicht mithilfe der SCHEMABINDING-Klausel erstellt, müssen Sie zudem über die erforderlichen Berechtigungen für die Tabellen und Sichten verfügen, auf die in der Definition der Sicht verwiesen wird.

Standardmäßig fallen Zeilen, die über eine Sicht hinzugefügt oder aktualisiert werden, nicht mehr in den Bereich der Sicht, wenn diese Zeilen nicht mehr den Kriterien der die Sicht definierenden Abfrage entsprechen. Falls Beispielsweise kann eine Abfrage zum Definieren einer Sicht erstellt werden, mit der alle Zeilen aus einer Tabelle abgerufen werden, in denen das Gehalt des jeweiligen Angestellten geringer ist als 30.000 $. Wenn das Gehalt eines der Angestellten auf 32.000 $ steigt, wird dieser Angestellte bei einer Abfrage der Sicht nicht mehr angezeigt, da sein Gehalt nicht mehr den Kriterien entspricht, die durch die Sicht festgelegt sind. Durch die WITH CHECK OPTION-Klausel wird jedoch gewährleistet, dass alle auf der Sicht ausgeführten Anweisungen zur Datenbearbeitung die Einhaltung der Kriterien sicherstellen, die in der die Sicht definierenden SELECT-Anweisung festgelegt wurden. Wenn Sie diese Klausel verwenden, ist es nicht möglich, Zeilen so zu ändern, dass sie nicht mehr in der Sicht angezeigt werden. Jede Bearbeitung einer Zeile, die dies zur Folge hätte, wird abgebrochen, und ein Fehler wird angezeigt.

So erstellen Sie eine Sicht