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.