sql >> Base de Datos >  >> RDS >> Sqlserver

Eliminar SCHEMABINDING de una vista en SQL Server

El propósito de vincular el esquema a una vista es garantizar que las tablas base a las que se hace referencia en la vista no se puedan modificar de una manera que afecte la definición de la vista.

Esto normalmente es algo bueno. Después de todo, no quieres que alguien venga y deje caer una mesa de la que depende tu vista, ¿verdad?

Pero, ¿qué sucede si necesita realizar cambios en una o más tablas a las que hace referencia su vista?

En este caso, podría eliminar el enlace de esquema de una vista, realizar los cambios en las tablas base y luego volver a aplicar el enlace de esquema.

Hay dos formas de eliminar el enlace de esquema de una vista:

  • Modifique la vista para que su definición ya no especifique el enlace de esquema.
  • Descarte la vista (luego vuelva a crearla sin vinculación de esquema si es necesario).

Ejemplo de una vista vinculada a un esquema

Primero, aquí hay un ejemplo de una vista enlazada al esquema:

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

Sabemos que es una vista vinculada a un esquema porque contiene WITH SCHEMABINDING en su definición. Para eliminar el enlace de esquema, todo lo que tenemos que hacer es eliminar ese bit.

Opción 1:modificar la vista

Para eliminar el enlace de esquema de esta vista modificándolo, podemos usar el siguiente código:

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

Todo lo que hicimos fue cambiar CREATE para ALTER y elimine WITH SCHEMABINDING .

Opción 2:soltar la vista

Este es un ejemplo de eliminar la vista y luego volver a crearla sin vincular el esquema:

DROP VIEW IF EXISTS dbo.v_Cats;
GO

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

En este caso, utilicé la sintaxis DROP IF EXISTS, que evita que se produzca un error en caso de que la vista no exista.