Microsoft SQL Server
CREAR VISTA
Buscar..
CREAR VISTA
CREATE VIEW view_EmployeeInfo
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM Employee
GO
Las filas de las vistas se pueden seleccionar como tablas:
SELECT FirstName
FROM view_EmployeeInfo
También puede crear una vista con una columna calculada. Podemos modificar la vista anterior de la siguiente manera agregando una columna calculada:
CREATE VIEW view_EmployeeReport
AS
SELECT EmployeeID,
FirstName,
LastName,
Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
HireDate
FROM Employee
GO
Esta vista agrega una columna adicional que aparecerá cuando SELECT
filas de ella. Los valores en esta columna adicional dependerán de los campos FirstName
y LastName
en la tabla Employee
y se actualizarán automáticamente cuando esos campos se actualicen.
CREAR VISTA con cifrado
CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS
SELECT EmployeeID, FirstName, LastName, HireDate
FROM Employee
GO
CREE VISTA CON INNER JOIN
CREATE VIEW view_PersonEmployee
AS
SELECT P.LastName,
P.FirstName,
E.JobTitle
FROM Employee AS E
INNER JOIN Person AS P
ON P.BusinessEntityID = E.BusinessEntityID
GO
Las vistas pueden usar uniones para seleccionar datos de numerosas fuentes, como tablas, funciones de tabla o incluso otras vistas. Este ejemplo utiliza las columnas FirstName y LastName de la tabla Person y la columna JobTitle de la tabla Employee.
Esta vista ahora se puede utilizar para ver todas las filas correspondientes para los administradores en la base de datos:
SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'
CREAR VISTA indexada
Para crear una vista con un índice, la vista debe crearse con las palabras clave WITH SCHEMABINDING
:
CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS
SELECT EmployeeID,
FirstName,
LastName,
HireDate
FROM [dbo].Employee
GO
Ahora se puede crear cualquier índice agrupado o no agrupado:
CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
EmployeeID ASC
)
Hay algunas limitaciones para las vistas indexadas:
La definición de vista puede hacer referencia a una o más tablas en la misma base de datos.
Una vez que se crea el índice agrupado único, se pueden crear índices no agrupados adicionales en la vista.
Puede actualizar los datos en las tablas subyacentes, incluidas las inserciones, actualizaciones, eliminaciones e incluso trunca.
No puede modificar las tablas y columnas subyacentes. La vista se crea con la opción WITH SCHEMABINDING.
No puede contener COUNT, MIN, MAX, TOP, uniones externas o algunas otras palabras clave o elementos.
Para obtener más información sobre la creación de vistas indexadas, puede leer este artículo de MSDN
VISTAS agrupadas
Una vista agrupada se basa en una consulta con una cláusula GROUP BY. Dado que cada uno de los grupos puede tener más de una fila en la base a partir de la cual se creó, estos son necesariamente VIEWs de solo lectura. Tales VIEWs usualmente tienen una o más funciones agregadas y se usan para propósitos de informes. También son útiles para trabajar alrededor de las debilidades en SQL. Considere una VISTA que muestre la venta más grande en cada estado. La consulta es sencilla:
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
FROM Sales
GROUP BY state_code;
VISTAS de UNION-ed
Las VISTAS basadas en una operación UNION o UNION ALL son de solo lectura porque no hay una única forma de asignar un cambio en una sola fila en una de las tablas base. El operador UNION eliminará filas duplicadas de los resultados. Los operadores UNION y UNION ALL ocultan de qué tabla provienen las filas. Tales VISTAS deben usar a, porque las columnas en UNION [ALL] no tienen nombres propios. En teoría, una UNIÓN de dos tablas desunidas, ninguna de las cuales tiene filas duplicadas en sí misma debería ser actualizable.
https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/
CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
FROM Dependents
GROUP BY emp_nbr)
UNION
(SELECT emp_nbr, 0
FROM Personnel AS P2
WHERE NOT EXISTS
(SELECT *
FROM Dependents AS D2
WHERE D2.emp_nbr = P2.emp_nbr));