Vistas: nombrar y reutilizar una consulta

Una misma selección puede aparecer en reportes, integraciones y pantallas diferentes. Una vista es un objeto que asigna un nombre a una consulta y presenta su resultado como un conjunto reutilizable.

La vista puede simplificar acceso y permisos, pero no almacena automáticamente una copia independiente de los datos.

Crear una vista

CREATE VIEW dbo.vw_ProductosActivos
AS
    SELECT
        p.IdProducto,
        p.IdCategoria,
        p.Nombre,
        p.Precio,
        p.Existencia
    FROM dbo.Producto AS p
    WHERE p.Activo = 1;
GO

CREATE VIEW debe aparecer como la primera instrucción de su lote, el grupo de instrucciones enviado junto a SQL Server. GO no es una instrucción de Transact-SQL; es un separador que reconocen herramientas como SQL Server Management Studio.

Consultar la vista

SELECT
    v.IdProducto,
    v.Nombre,
    v.Precio
FROM dbo.vw_ProductosActivos AS v
WHERE v.Precio <= 800
ORDER BY v.Precio;

El filtro exterior puede combinarse con la definición durante la optimización. Aun así, una vista compleja no garantiza una consulta rápida; debemos revisar el plan de ejecución, la estrategia elegida por SQL Server.

Modificarla

ALTER VIEW dbo.vw_ProductosActivos
AS
    SELECT
        p.IdProducto,
        p.IdCategoria,
        p.Nombre,
        p.Precio,
        p.Existencia,
        p.FechaActualizacion
    FROM dbo.Producto AS p
    WHERE p.Activo = 1;
GO

También podemos utilizar CREATE OR ALTER VIEW para que el mismo script cree la vista cuando falta o actualice su definición cuando ya existe.

Lo que una vista no ofrece

Una vista normal no acepta parámetros. Si necesitamos recibir valores, una función con valor de tabla o un procedimiento puede representar mejor la interfaz.

Tampoco debemos depender de un orden escrito dentro de la vista. El consumidor utiliza su propio ORDER BY para definir la presentación final.

Columnas explícitas

Evitar SELECT * ayuda a mantener estable el contrato de la vista: los nombres, tipos y significado que sus consumidores esperan. Agregar una columna a la tabla no debería exponerla accidentalmente a todos ellos.

Cuando cambian los objetos subyacentes —las tablas o vistas utilizadas por la definición—, revisamos y actualizamos la vista. SCHEMABINDING vincula esa definición al esquema de dichos objetos y evita ciertos cambios incompatibles, pero introduce requisitos adicionales.

Seguridad y modificaciones

Podemos conceder acceso a una vista sin exponer directamente todas las columnas de la tabla. La efectividad depende de propiedad, permisos —las autorizaciones concedidas a una cuenta o rol— y forma de acceso.

Algunas vistas son actualizables y permiten modificar la tabla subyacente; otras no. No asumimos que una vista es de solo lectura únicamente por ser una vista.

Qué conviene comprobar

Revisamos dependencias, permisos, columnas expuestas, planes y consumidores antes de cambiar una vista. Una modificación aparentemente compatible puede romper aplicaciones que esperan nombres, tipos o nulabilidad específicos; la nulabilidad indica si una columna admite NULL.

También evitamos capas profundas de vistas sobre vistas. Pueden ocultar uniones y filtros hasta volver difícil comprender el costo real de la consulta.

Relacionado con