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.