Vistas: nombrar y reutilizar una consulta

Una misma selección puede aparecer en reportes, integraciones y pantallas diferentes. Una vista asigna un nombre a esa consulta y presenta su resultado como un objeto 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. 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 resultante.

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. Agregar una columna a la tabla no debería exponerla accidentalmente a todos los consumidores.

Cuando cambian los objetos subyacentes, revisamos y actualizamos la definición. SCHEMABINDING puede proteger ciertas dependencias, pero introduce requisitos adicionales y no debe agregarse sin comprenderlos.

Seguridad y modificaciones

Podemos conceder acceso a una vista sin exponer directamente todas las columnas de la tabla. La efectividad depende de propiedad, permisos 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.

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

  • CREATE OR ALTER: facilita despliegues repetibles de objetos programables.
  • Funciones con valor de tabla: aceptan parámetros y devuelven conjuntos.
  • Procedimientos almacenados: ejecutan lógica y pueden devolver varios resultados.
  • Dependencias: muestran qué objetos utiliza y cuáles la consumen.