Zwykle dobrym pomysłem jest schematyczne powiązanie widoków w SQL Server.
Schemat powiązania widoku zapewni, że tabel bazowych nie będzie można zmienić w sposób, który miałby wpływ na widok. Bez powiązania schematu bazowe tabele lub inne obiekty mogą być modyfikowane, a nawet usuwane. Jeśli tak się stanie, widok nie będzie już działał zgodnie z oczekiwaniami.
Aby utworzyć widok powiązany ze schematem, użyj WITH SCHEMABINDING
w kodzie T-SQL do tworzenia widoku.
Przykład
Oto przykład tworzenia widoku powiązanego ze schematem:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Zauważ, że użyłem dwuczęściowej nazwy podczas odwoływania się do tabeli w moim zapytaniu — użyłem dbo.Cats
zamiast po prostu Cats
. Jest to wymagane do powiązania obiektu ze schematem. Jeśli spróbujesz schematycznie powiązać obiekt bez użycia dwuczęściowych nazw, otrzymasz błąd.
Teraz, gdy powiązałem schemat z moim widokiem, jeśli spróbuję usunąć tabelę, do której odwołuje się jej definicja, otrzymuję błąd:
DROP TABLE Cats;
Wynik:
Msg 3729, Level 16, State 1, Line 1 Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.
Oto, co się stanie, jeśli spróbuję powiązać widok schematycznie bez używania dwuczęściowego nazewnictwa:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM Cats; GO
Wynik:
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.
Inne atrybuty widoku
Wiele atrybutów można oddzielić przecinkami. Nie musisz określać WITH
dla każdego atrybutu.
Na przykład, jeśli chcesz, aby widok był powiązany ze schematem i zaszyfrowane, możesz to zrobić:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING, ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO