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

Crear una vista enlazada al esquema en SQL Server

Por lo general, es una buena idea vincular el esquema de sus vistas en SQL Server.

El enlace de esquema de su vista garantizará que las tablas subyacentes no se puedan cambiar de una manera que afecte la vista. Sin vinculación de esquema, las tablas subyacentes u otros objetos podrían modificarse o incluso eliminarse. Si eso sucede, la vista ya no funcionará como se esperaba.

Para crear una vista enlazada al esquema, utilice WITH SCHEMABINDING en su código T-SQL para crear la vista.

Ejemplo

Este es un ejemplo de cómo crear una vista enlazada a un esquema:

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

Observe que usé el nombre de dos partes al hacer referencia a la tabla en mi consulta:usé dbo.Cats en lugar de solo Cats . Hacer esto es un requisito para el enlace de esquema de un objeto. Si intenta enlazar un objeto mediante un esquema sin usar nombres de dos partes, obtendrá un error.

Ahora que he enlazado el esquema de mi vista, si trato de eliminar la tabla a la que se hace referencia en su definición, aparece un error:

DROP TABLE Cats;

Resultado:

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

Esto es lo que sucede si trato de vincular la vista con un esquema sin usar nombres de dos partes:

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

Resultado:

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.

Otros atributos de vista

Varios atributos se pueden separar con una coma. No es necesario especificar WITH para cada atributo.

Por ejemplo, si desea que la vista esté vinculada a un esquema y encriptado, puedes hacer esto:

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