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

Supprimer SCHEMABINDING d'une vue dans SQL Server

Le but de la liaison de schéma à une vue est de garantir que les tables de base référencées dans la vue ne peuvent pas être modifiées d'une manière qui affecterait la définition de la vue.

C'est normalement une bonne chose. Après tout, vous ne voulez pas que quelqu'un vienne et laisse tomber une table dont dépend votre vue, n'est-ce pas ?

Mais que se passe-t-il si vous devez apporter des modifications à une ou plusieurs tables référencées par votre vue ?

Dans ce cas, vous pouvez supprimer la liaison de schéma d'une vue, apporter les modifications à la ou aux tables de base, puis réappliquer la liaison de schéma.

Il existe deux façons de supprimer la liaison de schéma d'une vue :

  • Modifiez la vue afin que sa définition ne spécifie plus la liaison de schéma.
  • Supprimer la vue (puis la recréer sans liaison de schéma si nécessaire).

Exemple de vue liée au schéma

Tout d'abord, voici un exemple de vue liée au schéma :

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

Nous savons qu'il s'agit d'une vue liée au schéma car elle contient WITH SCHEMABINDING dans sa définition. Pour supprimer la liaison de schéma, il nous suffit de supprimer ce bit.

Option 1 - Modifier la vue

Pour supprimer la liaison de schéma de cette vue en la modifiant, nous pouvons utiliser le code suivant :

ALTER VIEW dbo.v_Cats
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Tout ce que nous avons fait a été de changer CREATE à ALTER , et supprimez WITH SCHEMABINDING .

Option 2 - Supprimer la vue

Voici un exemple de suppression de la vue, puis de sa recréation sans liaison de schéma :

DROP VIEW IF EXISTS dbo.v_Cats;
GO

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

Dans ce cas, j'ai utilisé la syntaxe DROP IF EXISTS, qui empêche une erreur de se produire si la vue n'existe pas.