Es ist normalerweise eine gute Idee, Ihre Ansichten in SQL Server Schema zu binden.
Die Schemabindung Ihrer Ansicht stellt sicher, dass die zugrunde liegenden Tabellen nicht auf eine Weise geändert werden können, die sich auf die Ansicht auswirken würde. Ohne Schemabindung könnten die zugrunde liegenden Tabellen oder andere Objekte geändert oder sogar gelöscht werden. In diesem Fall funktioniert die Ansicht nicht mehr wie erwartet.
Um eine schemagebundene Ansicht zu erstellen, verwenden Sie WITH SCHEMABINDING
in Ihrem T-SQL-Code zum Erstellen der Ansicht.
Beispiel
Hier ist ein Beispiel für das Erstellen einer schemagebundenen Ansicht:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Beachten Sie, dass ich den zweiteiligen Namen verwendet habe, als ich in meiner Abfrage auf die Tabelle verwiesen habe – ich habe dbo.Cats
verwendet statt nur Cats
. Dies ist eine Voraussetzung für die Schemabindung eines Objekts. Wenn Sie versuchen, ein Objekt an ein Schema zu binden, ohne zweiteilige Namen zu verwenden, erhalten Sie eine Fehlermeldung.
Jetzt, da ich meine Ansicht schemagebunden habe, erhalte ich eine Fehlermeldung, wenn ich versuche, die Tabelle zu löschen, auf die in ihrer Definition verwiesen wird:
DROP TABLE Cats;
Ergebnis:
Msg 3729, Level 16, State 1, Line 1 Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.
Folgendes passiert, wenn ich versuche, die Ansicht ohne zweiteilige Benennung zu binden:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM Cats; GO
Ergebnis:
Msg 4512, Level 16, State 3, Procedure v_Cats, Line 5 Cannot schema bind view 'dbo.v_Cats' because name 'Cats' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
Andere Ansichtsattribute
Mehrere Attribute können durch ein Komma getrennt werden. Sie müssen WITH
nicht angeben für jedes Attribut.
Wenn Sie beispielsweise möchten, dass die Ansicht schemagebunden ist und verschlüsselt, können Sie dies tun:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING, ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO