Det er normalt en god idé at skemabinde dine synspunkter i SQL Server.
Skema, der binder din visning, vil sikre, at de underliggende tabeller ikke kan ændres på en måde, der ville påvirke visningen. Uden skemabinding kan de underliggende tabeller eller andre objekter ændres eller endda slettes. Hvis det sker, vil visningen ikke længere fungere som forventet.
For at oprette en skemabundet visning skal du bruge WITH SCHEMABINDING
i din T-SQL-kode for at oprette visningen.
Eksempel
Her er et eksempel på oprettelse af en skemabundet visning:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Bemærk, at jeg brugte det todelte navn, når jeg refererede til tabellen i min forespørgsel – jeg brugte dbo.Cats
i stedet for bare Cats
. At gøre dette er et krav for skemabinding af et objekt. Hvis du forsøger at skemabinde et objekt uden at bruge todelte navne, får du en fejl.
Nu hvor jeg har bundet mit synspunkt, får jeg en fejl, hvis jeg forsøger at droppe tabellen, der henvises til i dens definition:
DROP TABLE Cats;
Resultat:
Msg 3729, Level 16, State 1, Line 1 Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.
Her er, hvad der sker, hvis jeg forsøger at skemabinde visningen uden at bruge todelt navngivning:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM Cats; GO
Resultat:
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.
Andre visningsattributter
Flere attributter kan adskilles med et komma. Du behøver ikke at angive WITH
for hver egenskab.
For eksempel, hvis du ønsker, at visningen skal være skemabundet og krypteret, kan du gøre dette:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING, ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO