Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer une vue liée au schéma dans SQL Server

C'est généralement une bonne idée de lier au schéma vos vues dans SQL Server.

La liaison de schéma à votre vue garantira que les tables sous-jacentes ne peuvent pas être modifiées d'une manière qui affecterait la vue. Sans liaison de schéma, les tables sous-jacentes ou d'autres objets pourraient être modifiés ou même supprimés. Si cela se produit, la vue ne fonctionnera plus comme prévu.

Pour créer une vue liée au schéma, utilisez le WITH SCHEMABINDING dans votre code T-SQL pour créer la vue.

Exemple

Voici un exemple de création d'une vue liée au schéma :

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Remarquez que j'ai utilisé le nom en deux parties lors du référencement de la table dans ma requête - j'ai utilisé dbo.Cats au lieu de simplement Cats . Cela est une exigence pour le schéma de liaison d'un objet. Si vous essayez de lier un objet au schéma sans utiliser de noms en deux parties, vous obtiendrez une erreur.

Maintenant que j'ai lié ma vue au schéma, si j'essaie de supprimer la table référencée dans sa définition, j'obtiens une erreur :

DROP TABLE Cats;

Résultat :

Msg 3729, Level 16, State 1, Line 1
Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.

Voici ce qui se passe si j'essaie de lier le schéma à la vue sans utiliser de nommage en deux parties :

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM Cats;
GO

Résultat :

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.

Autres attributs de vue

Plusieurs attributs peuvent être séparés par une virgule. Vous n'avez pas besoin de spécifier WITH pour chaque attribut.

Par exemple, si vous voulez que la vue soit liée au schéma et crypté, vous pouvez le faire :

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING, ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO