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));


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow