Freigeben über


ALTER VIEW (Transact-SQL)

Ändert eine zuvor erstellte Sicht. Darunter fallen auch indizierte Sichten. ALTER VIEW wirkt sich nicht auf abhängige gespeicherte Prozeduren oder Trigger aus und ändert keine Berechtigungen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{ 
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     
} 

Argumente

  • schema_name
    Der Name des Schemas, zu dem die Sicht gehört.

  • view_name
    Die zu ändernde Sicht.

  • column
    Ist der Name von einer oder von mehreren, durch Trennzeichen voneinander getrennten Spalten, die Teil der angegebenen Sicht sein sollen.

    Wichtiger HinweisWichtig

    Spaltenberechtigungen bleiben nur erhalten, wenn die Spalten vor und nach der Ausführung von ALTER VIEW den gleichen Namen haben.

    HinweisHinweis

    In den Spalten für die Sicht gelten die Berechtigungen für einen Spaltennamen über eine CREATE VIEW- oder ALTER VIEW-Anweisung hinaus, unabhängig von der Quelle der zugrunde liegenden Daten. Wenn beispielsweise Berechtigungen für die SalesOrderID-Spalte in einer CREATE VIEW-Anweisung erteilt werden, kann die SalesOrderID-Spalte beispielsweise zu OrderRef mithilfe einer ALTER VIEW-Anweisung umbenannt werden und weiterhin über die mithilfe von SalesOrderID der Sicht zugeordneten Berechtigungen verfügen.

  • ENCRYPTION
    Verschlüsselt die sys.syscomments-Einträge, die den Text der ALTER VIEW-Anweisung enthalten. Mithilfe von WITH ENCRYPTION kann verhindert werden, dass die Sicht als Teil der SQL Server-Replikation veröffentlicht wird.

  • SCHEMABINDING
    Bindet die Sicht an das Schema der zugrunde liegenden Basistabellen. Wird SCHEMABINDING angegeben, ist es nicht möglich, Änderungen der Basistabellen auszuführen, die sich auf die Sichtdefinition auswirken würden. Die Sichtdefinition muss zuerst geändert oder gelöscht werden, um Abhängigkeiten von der zu ändernden Tabelle zu entfernen. Wenn Sie SCHEMABINDING verwenden, muss select_statement die zweiteiligen Namen (schema**.**object) der Tabellen, Sichten oder benutzerdefinierten Funktionen einschließen, auf die verwiesen wird. Alle Objekte, auf die verwiesen wird, müssen in derselben Datenbank vorhanden sein.

    Sichten oder Tabellen, 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. Andernfalls löst Database Engine (Datenbankmodul) einen Fehler aus. Darüber hinaus schlägt die Ausführung von ALTER TABLE-Anweisungen für Tabellen fehl, die Bestandteil von Sichten mit Schemabindung sind, falls diese Anweisungen die Sichtdefinition betreffen.

  • VIEW_METADATA
    Gibt an, dass die Instanz von SQL Server die Metadateninformationen der Sicht anstelle der Basistabelle(n) an die DB-Library-, ODBC- und OLE DB-APIs zurückgibt, wenn Metadaten des Durchsuchenmodus für eine Abfrage angefordert werden, die auf die Sicht verweist. Metadaten des Durchsuchenmodus sind zusätzliche Metadaten, die von der Database Engine (Datenbankmodul)-Instanz an die clientbasierten DB-Library-, ODBC- und OLE DB-APIs zurückgegeben werden. Mithilfe dieser Metadaten können die clientbasierten APIs aktualisierbare clientbasierte Cursors implementieren. Metadaten des Durchsuchenmodus enthalten Informationen zu der Basistabelle, zu der die Spalten im Resultset gehören.

    Bei Sichten, die mit VIEW_METADATA erstellt wurden, geben die Metadaten des Durchsuchenmodus den Sichtnamen anstelle der Basistabellennamen zurück, wenn Spalten aus der Sicht im Resultset beschrieben werden.

    Wenn eine Sicht mithilfe von WITH VIEW_METADATA erstellt wurde, sind alle enthaltenen Spalten (außer der timestamp-Spalte) aktualisierbar, falls die Sicht INSERT- oder UPDATE INSTEAD OF-Trigger besitzt. Weitere Informationen finden Sie im Abschnitt mit den Hinweisen unter CREATE VIEW (Transact-SQL).

  • AS
    Die Aktionen, die die Sicht ausführen soll.

  • select_statement
    Die SELECT-Anweisung, die die Sicht definiert.

  • WITH CHECK OPTION
    Erzwingt, dass alle Datenänderungsanweisungen, die für die Sicht ausgeführt werden, den Kriterien folgen müssen, die durch select_statement festgelegt wurden.

Hinweise

Weitere Informationen zu ALTER VIEW finden Sie in den Hinweisen unter CREATE VIEW (Transact-SQL).

HinweisHinweis

Wenn die vorherige Sichtdefinition mithilfe von WITH ENCRYPTION oder CHECK OPTION erstellt wurde, sind diese Optionen nur dann aktiviert, wenn sie in der ALTER VIEW-Anweisung enthalten sind.

Wird eine derzeit verwendete Sicht mithilfe von ALTER VIEW geändert, belegt Database Engine (Datenbankmodul) die Sicht mit einer exklusiven Schemasperre. Wenn die Sperre erteilt wird und keine aktiven Benutzer der Sicht vorhanden sind, löscht Database Engine (Datenbankmodul) alle Kopien der Sicht aus dem Prozedurcache. Vorhandene Pläne, die auf die Sicht verweisen, bleiben im Cache, werden aber beim Aufrufen erneut kompiliert.

ALTER VIEW kann auf indizierte Sichten angewendet werden; ALTER VIEW löscht jedoch vorbehaltlos alle Indizes in der Sicht.

Berechtigungen

Für die Ausführung von ALTER VIEW wird zumindest die ALTER-Berechtigung für OBJECT benötigt.

Beispiele

Im folgenden Beispiel wird eine Sicht mit allen Mitarbeitern und deren Anstellungsdaten mit der Bezeichnung EmployeeHireDate erstellt. Die Berechtigungen werden der Sicht erteilt, doch die Anforderungen werden geändert, sodass Mitarbeiter ausgewählt werden, deren Anstellungsdatum vor einem bestimmten Datum liegt. Dann wird die Sicht mithilfe von ALTER VIEW ersetzt.

USE AdventureWorks ;
GO
CREATE VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID ;
GO

Die Sicht muss geändert werden, damit nur die Mitarbeiter enthalten sind, die vor 1997 eingestellt wurden. Wird ALTER VIEW nicht verwendet, sondern die Sicht gelöscht und erneut erstellt, müssen die zuvor verwendete GRANT-Anweisung sowie alle anderen Anweisungen im Zusammenhang mit Berechtigungen für diese Sicht erneut eingegeben werden.

ALTER VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE HireDate < CONVERT(DATETIME,'19980101',101) ;
GO