CREATE VIEW (Transact-SQL)

 

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síBase de datos SQL de AzuresíAlmacenamiento de datos SQL de Azure síAlmacenamiento de datos paralelos

Crea una tabla virtual cuyo contenido (columnas y filas) se define mediante una consulta. Utilice esta instrucción para crear una vista de los datos de una o varias tablas de la base de datos. Por ejemplo, una vista se puede utilizar para lo siguiente:

  • Para centrar, simplificar y personalizar la percepción de la base de datos para cada usuario.

  • Como mecanismo de seguridad, que permite a los usuarios obtener acceso a los datos por medio de la vista, pero no les conceden el permiso de obtener acceso directo a las tablas base subyacentes de la vista.

  • Para proporcionar una interfaz compatible con versiones anteriores para emular una tabla cuyo esquema ha cambiado.

Topic link icon Convenciones de sintaxis de Transact-SQL

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]   
[ WITH <view_attribute> [ ,...n ] ]   
AS select_statement   
[ WITH CHECK OPTION ]   
[ ; ]  
  
<view_attribute> ::=   
{  
    [ ENCRYPTION ]  
    [ SCHEMABINDING ]  
    [ VIEW_METADATA ]       
}   

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
CREATE VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  
  
<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>  

O ALTER

Se aplica a: Azure Base de datos SQL, SQL Server (a partir de SQL Server 2016 SP1).

Condicionalmente, se modifica la vista solo si ya existe.

schema_name
Es el nombre del esquema al que pertenece la vista.

view_name
Es el nombre de la vista. Los nombres de las vistas deben cumplir las reglas de los identificadores. La especificación del nombre del propietario de la vista es opcional.

columna
Es el nombre que se va a utilizar para una columna en una vista. Solo se necesita un nombre de columna cuando una columna proviene de una expresión aritmética, una función o una constante; cuando dos o más columnas puedan tener el mismo nombre, normalmente debido a una combinación; o cuando una columna de una vista recibe un nombre distinto al de la columna de la que proviene. Los nombres de columna se pueden asignar también en la instrucción SELECT.

Si columna no se especifica, las columnas de la vista adquieren los mismos nombres que las columnas de la instrucción SELECT.

System_CAPS_ICON_note.jpg Nota


En las columnas de la vista, los permisos de un nombre de columna se aplican mediante una instrucción CREATE VIEW o ALTER VIEW, independientemente del origen de los datos subyacentes. Por ejemplo, si se conceden permisos en el SalesOrderID columna en una instrucción CREATE VIEW, una instrucción ALTER VIEW puede dar el nombre la SalesOrderID nombre de la columna con una columna diferente, como OrderRef, y seguir teniendo los permisos asociados con la vista utilizando SalesOrderID.

AS
Especifica las acciones que va a llevar a cabo la vista.

select_statement
Es la instrucción SELECT que define la vista. Dicha instrucción puede utilizar más de una tabla y otras vistas. Se necesitan permisos adecuados para seleccionar los objetos a los que se hace referencia en la cláusula SELECT de la vista que se ha creado.

Una vista no tiene por qué ser un simple subconjunto de filas y de columnas de una tabla determinada. Es posible crear una vista que utilice más de una tabla u otras vistas mediante una cláusula SELECT de cualquier complejidad.

En una definición de vista indizada, la instrucción SELECT debe ser una instrucción de una única tabla o una instrucción JOIN de varias tablas con agregación opcional.

Las cláusulas SELECT de una definición de vista no pueden incluir lo siguiente:

  • Una cláusula ORDER BY, a menos que también haya una cláusula TOP en la lista de selección de la instrucción SELECT

    System_CAPS_ICON_important.jpg Importante


    La cláusula ORDER BY solo se usa para determinar las filas devueltas por la cláusula TOP u OFFSET en la definición de la vista. Esta cláusula no garantiza resultados ordenados cuando se consulte la vista, a menos que también se especifique ORDER BY en la propia consulta.

  • La palabra clave INTO

  • La cláusula OPTION

  • Una referencia a una tabla temporal o a una variable de tabla

Dado que select_statement utiliza la instrucción SELECT, es válido que se usarán las de sugerencias de < join_hint > y < table_hint > sugerencias tal como se especifica en la cláusula FROM. Para obtener más información, vea FROM ( Transact-SQL ) y SELECT ( Transact-SQL ).

Funciones y varias instrucciones SELECT separadas por UNION o UNION ALL pueden utilizarse en select_statement.

CHECK OPTION
Obliga a todas las instrucciones de modificación de datos ejecutadas en la vista sigan los criterios establecidos en select_statement. Cuando una fila se modifica mediante una vista, WITH CHECK OPTION garantiza que los datos permanezcan visibles en toda la vista después de confirmar la modificación.

System_CAPS_ICON_note.jpg Nota


Cualquier actualización realizada directamente en las tablas subyacentes de una vista no se comprueba en la vista, aunque se haya especificado CHECK OPTION.

ENCRYPTION

Se aplica a: desde SQL Server 2008 hasta SQL Server 2016.

Cifra las entradas de sys.syscomments que contienen el texto de la instrucción CREATE VIEW. El uso de WITH ENCRYPTION evita que la vista se publique como parte de la replicación de SQL Server.

SCHEMABINDING
Enlaza la vista al esquema de las tablas subyacentes. Cuando se especifica SCHEMABINDING, las tablas base no se pueden modificar de una forma que afecte a la definición de la vista. En primer lugar, se debe modificar o quitar la propia definición de la vista para quitar las dependencias en la tabla que se va a modificar. Cuando se utiliza SCHEMABINDING, los select_statement debe incluir los nombres de dos partes (esquema.objeto) de tablas, vistas o funciones definidas por el usuario que se hace referencia. Todos los objetos a los que se hace referencia se deben encontrar en la misma base de datos.

Vistas o tablas que participan en una vista creada con la cláusula SCHEMABINDING no se puede quitar a menos que la vista se quita o cambia para que ya no tiene enlaces de esquema. En caso contrario, Motor de base de datos genera un error. Además, la ejecución de las instrucciones ALTER TABLE en tablas que participan en vistas que tienen enlaces de esquema provoca un error si estas instrucciones afectan a la definición de la vista.

VIEW_METADATA
Especifica que la instancia de SQL Server devolverá a las API de DB-Library, ODBC y OLE DB la información de metadatos sobre la vista en vez de las tablas base cuando se soliciten los metadatos del modo de exploración para una consulta que hace referencia a la vista. Los metadatos del modo de exploración son metadatos adicionales que la instancia de SQL Server devuelve a estas API del lado cliente. Estos metadatos permiten a las API del lado cliente implementar cursores del lado cliente actualizables. Los metadatos del modo de exploración incluyen información sobre la tabla base a la que pertenecen las columnas del conjunto de resultados.

Para las vistas creadas con VIEW_METADATA, los metadatos del modo de exploración devuelven el nombre de vista y no los nombres de tablas base cuando describen columnas de la vista en el conjunto de resultados.

Cuando se crea una vista utilizando WITH VIEW_METADATA, todas sus columnas, excepto un timestamp columna, son actualizables si la vista tiene INSTEAD OF INSERT o desencadenadores INSTEAD OF UPDATE. Para obtener más información acerca de las vistas actualizables, vea la sección Notas.

Una vista solo se puede crear en la base de datos actual. CREATE VIEW debe ser la primera instrucción en un lote de consultas. Una vista puede tener un máximo de 1.024 columnas.

Cuando se realiza una consulta a través de una vista, el Motor de base de datos se asegura de que todos los objetos de base de datos a los que se hace referencia en algún lugar de la instrucción existen, que son válidos en el contexto de la instrucción y que las instrucciones de modificación de datos no infringen ninguna regla de integridad de los datos. Las comprobaciones que no son correctas devuelven un mensaje de error. Las comprobaciones correctas traducen la acción a una acción con las tablas subyacentes.

Si una vista depende de una tabla o vista que se ha quitado, el Motor de base de datos genera un mensaje de error si alguien trata de utilizar la vista. Si se crea una nueva tabla o vista y la estructura de la tabla no cambia con respecto a la tabla base anterior para sustituir a la eliminada, se puede volver a utilizar la vista. Si cambia la estructura de la nueva tabla o vista, es necesario eliminar la vista y volver a crearla.

Si no se crea una vista con la cláusula SCHEMABINDING, sp_refreshview deben ejecutarse cuando se realizan cambios en los objetos subyacentes de la vista que afectan a la definición de la vista. De lo contrario, la vista podría producir resultados inesperados en las consultas.

Cuando se crea una vista, información sobre la vista se almacena en las siguientes vistas de catálogo: sys.views, sys.columns, y sys.sql_expression_dependencies. El texto de la instrucción CREATE VIEW se almacena en la sys.sql_modules vista de catálogo.

Define una consulta que utiliza un índice en una vista con numérico o float expresiones pueden tener un resultado que es diferente de una consulta similar que no utiliza el índice en la vista. Esta diferencia se podría deber a errores de redondeo durante las acciones INSERT, DELETE o UPDATE en las tablas subyacentes.

Cuando se crea una vista, el Motor de base de datos guarda la configuración de SET QUOTED_IDENTIFIER y SET ANSI_NULLS. Esta configuración original se utiliza para analizar la vista cuando ésta se utiliza. Por tanto, cualquier configuración de sesión de cliente de SET QUOTED_IDENTIFIER y SET ANSI_NULLS no afecta a la definición de la vista cuando se obtiene acceso a ella.

Es posible modificar los datos de una tabla base subyacente mediante una vista, siempre que se cumplan las siguientes condiciones:

  • Cualquier modificación, incluidas las instrucciones UPDATE, INSERT y DELETE, debe hacer referencia a las columnas de una única tabla base.

  • Las columnas que se va a modificar en la vista deben hacer referencia directamente a los datos subyacentes en las columnas de tabla. Las columnas no se pueden obtener de otra forma, como las siguientes:

    • Una función de agregado: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR y VARP.

    • Un cálculo. La columna no se puede calcular a partir de una expresión que utilice otras columnas. Las columnas formadas mediante los operadores de conjunto UNION, UNION ALL, CROSSJOIN, EXCEPT e INTERSECT equivalen a un cálculo y tampoco son actualizables.

  • Las columnas que se van a modificar no se ven afectadas por las cláusulas GROUP BY, HAVING o DISTINCT.

  • TOP no se utiliza en cualquier lugar en el select_statement de la vista junto con la cláusula WITH CHECK OPTION.

Las restricciones anteriores se aplican a cualquier subconsulta de la cláusula FROM de la vista, al igual que a la propia vista. Normalmente, el Motor de base de datos debe poder realizar un seguimiento sin ambigüedades de las modificaciones de la definición de la vista a una tabla base. Para obtener más información, vea modificar datos mediante una vista.

Si las restricciones anteriores le impiden modificar datos directamente mediante una vista, considere las siguientes opciones:

  • Desencadenadores INSTEAD OF

    Es posible crear desencadenadores INSTEAD OF en una vista para que sea actualizable. El desencadenador INSTEAD OF se ejecuta en lugar de la instrucción de modificación de datos en la que se define el desencadenador. Este desencadenador permite al usuario especificar el conjunto de acciones que hay que realizar para procesar la instrucción de modificación de datos. Por lo tanto, si existe un desencadenador INSTEAD OF para una vista en una instrucción de modificación de datos determinada (INSERT, UPDATE o DELETE), la vista correspondiente se puede actualizar mediante esa instrucción. Para obtener más información acerca de desencadenadores INSTEAD OF, vea desencadenadores DML.

  • Vistas con particiones

    Si la vista es una vista con particiones, se puede actualizar con determinadas restricciones. Si es necesario, el Motor de base de datos distingue las vistas con particiones locales como las vistas en las que todas las tablas participantes y la vista se encuentran en la misma instancia de SQL Server y las vistas con particiones distribuidas como las vistas en las que al menos una de las tablas de la vista reside en otro servidor o en uno remoto.

Una vista con particiones es una vista definida por un operador UNION ALL de las tablas miembro estructuradas de la misma manera pero almacenadas en diferentes tablas de la misma instancia de SQL Server o en un grupo de instancias autónomas de servidores de SQL Server denominados servidores de bases de datos federadas.

System_CAPS_ICON_note.jpg Nota


El método preferido para la partición de datos local en un servidor es a través de tablas con particiones. Para obtener más información, consulte Partitioned Tables and Indexes.

Si diseña un esquema de partición, debe tener claro qué datos pertenecen a cada partición. Por ejemplo, los datos de la tabla Customers se distribuyen en tres tablas miembro en tres ubicaciones de servidor: Customers_33 en Server1, Customers_66 en Server2 y Customers_99 en Server3.

Una vista con particiones de Server1 se define de la siguiente forma:

--Partitioned view as defined on Server1  
CREATE VIEW Customers  
AS  
--Select from local member table.  
SELECT *  
FROM CompanyData.dbo.Customers_33  
UNION ALL  
--Select from member table on Server2.  
SELECT *  
FROM Server2.CompanyData.dbo.Customers_66  
UNION ALL  
--Select from mmeber table on Server3.  
SELECT *  
FROM Server3.CompanyData.dbo.Customers_99;  

Normalmente, se dice que una vista tiene particiones si tiene el siguiente formato:

SELECT <select_list1>  
FROM T1  
UNION ALL  
SELECT <select_list2>  
FROM T2  
UNION ALL  
...  
SELECT <select_listn>  
FROM Tn;  

  1. La list de selección

    • Todas las columnas de las tablas miembro deben seleccionarse en la lista de columnas de la definición de la vista.

    • Las columnas que se encuentren en la misma posición ordinal de cada select list deben ser del mismo tipo, incluidas las intercalaciones. No es suficiente que las columnas sean de tipos implícitamente convertibles, como sucede normalmente con UNION.

      Además, al menos una columna (por ejemplo <col>) debe aparecer en todas las listas de selección en la misma posición ordinal. Esta columna <col> debe definirse de tal forma que las tablas miembro T1, ..., Tn tengan restricciones CHECK C1, ..., Cn definidas en <col>, respectivamente.

      La restricción C1 definida en la tabla T1 debe tener el siguiente formato:

      C1 ::= < simple_interval > [ OR < simple_interval > OR ...]  
      < simple_interval > :: =   
      < col > { < | > | <= | >= | = < value >}   
      | < col > BETWEEN < value1 > AND < value2 >  
      | < col > IN ( value_list )  
      | < col > { > | >= } < value1 > AND  
      < col > { < | <= } < value2 >  
      
      
    • Las restricciones deben estar definidas de manera que cualquier valor especificado de <col> pueda cumplir al menos una de las restricciones C1, ..., Cn de modo que las restricciones formen un conjunto de intervalos no combinados o que no se superpongan. La columna <col> en la que se definen las restricciones no combinadas se denomina columna de partición. Observe que la columna de partición puede tener diferentes nombres en las tablas subyacentes. Las restricciones deben estar habilitadas y ser de confianza para cumplir las condiciones mencionadas anteriormente de la columna de partición. Si las restricciones están deshabilitadas, vuelva a habilitarlas mediante el uso de la RESTRICCIÓN CHECK constraint_name opción de ALTER TABLE y utilizar la opción WITH CHECK para validarlas.

      En los siguientes ejemplos se muestran conjuntos válidos de restricciones:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
      
    • No se puede utilizar la misma columna varias veces en la lista de selección.

  2. Columna de partición

    • La columna de partición forma parte de la restricción PRIMARY KEY de la tabla.

    • No puede ser una calculada, de identidad, de forma predeterminada, o timestamp columna.

    • Si existe más de una restricción en la misma columna de una tabla miembro, el Motor de base de datos omite todas las restricciones y no las tiene en cuenta al determinar si la vista tiene particiones. Para cumplir las condiciones de la vista con particiones, solamente debe existir una restricción de partición en la columna de partición.

    • No hay restricciones sobre la posibilidad de actualización de la columna de partición.

  3. Tablas miembro o tablas subyacentes T1, ..., Tn

    • Las tablas pueden ser locales o tablas de otros equipos que ejecuten SQL Server a los que se haga referencia mediante un nombre de cuatro partes o un nombre basado en OPENDATASOURCE u OPENROWSET. La sintaxis de OPENDATASOURCE y OPENROWSET puede especificar un nombre de tabla, pero no una consulta de paso a través. Para obtener más información, vea OPENDATASOURCE ( Transact-SQL ) y OPENROWSET ( Transact-SQL ).

      Si una o más tablas miembro son remotas, la vista se denomina vista con particiones distribuida y se aplican condiciones adicionales. Se describen más adelante en esta sección.

    • La misma tabla no puede aparecer dos veces en el conjunto de tablas que se está combinando con la instrucción UNION ALL.

    • Las tablas miembro no pueden tener índices creados en columnas calculadas de la tabla.

    • Las tablas miembro deben tener todas las restricciones de CLAVE PRINCIPAL en el mismo número de columnas.

    • Todas las tablas miembro de la vista deben tener el mismo valor de relleno ANSI. Esto se puede establecer utilizando la Opciones de usuario opción sp_configure o la instrucción SET.

Las siguientes restricciones se aplican a instrucciones que modifican datos en vistas con particiones:

  • La instrucción INSERT debe proporcionar valores para todas las columnas de la vista, incluso si las tablas miembro subyacentes tienen una restricción DEFAULT para esas columnas o si admiten valores NULL. En las columnas de la tabla miembro con definiciones DEFAULT, las instrucciones no pueden usar explícitamente la palabra clave DEFAULT.

  • El valor que se va a insertar en la columna de partición debe cumplir al menos una de las restricciones subyacentes; en caso contrario, la acción de inserción provocará un error con una infracción de restricción.

  • Las instrucciones UPDATE no pueden especificar la palabra clave DEFAULT como valor de la cláusula SET, aunque la columna tenga definido un valor DEFAULT en la tabla miembro correspondiente.

  • Las columnas de la vista que sean columnas de identidad en una o varias tablas miembro no se pueden modificar mediante una instrucción INSERT o UPDATE.

  • Si una de las tablas miembro contiene una timestamp columna, no se pueden modificar los datos mediante una instrucción INSERT o UPDATE.

  • Si una de las tablas miembro contiene un desencadenador o una restricción ON UPDATE CASCADE/SET NULL/SET DEFAULT u ON DELETE CASCADE/SET NULL/SET DEFAULT, no se puede modificar la vista.

  • Las acciones INSERT, UPDATE y DELETE en una vista con particiones no están permitidas si hay una autocombinación con la misma vista o con cualquiera de las tablas miembro de la instrucción.

  • Importación masiva de datos en una vista con particiones no es compatible con bcp las o BULK INSERT e INSERT... SELECT * FROM OPENROWSET(BULK...). Sin embargo, puede insertar varias filas en una vista con particiones mediante el INSERTAR instrucción.

    System_CAPS_ICON_note.jpg Nota


    Para actualizar una vista con particiones, el usuario debe tener permisos INSERT, UPDATE y DELETE en las tablas miembro.

A las vistas con particiones distribuidas (cuando una o varias tablas miembro son remotas) se les aplican las siguientes condiciones adicionales:

  • Se iniciará una transacción distribuida para garantizar la atomicidad en todos los nodos que se ve afectados por la actualización.

  • La opción XACT_ABORT SET debe establecerse en ON para que las instrucciones INSERT, UPDATE o DELETE funcionen.

  • Las columnas de tablas remotas de tipo smallmoney que se hace referencia en una vista con particiones se asignan como dinero. Por lo tanto, las columnas correspondientes (en la misma posición ordinal en la lista de selección) de las tablas locales también deben ser de tipo dinero.

  • En el nivel de compatibilidad 110 y posterior, las columnas de tablas remotas de tipo smalldatetime que se hace referencia en una vista con particiones se asignan como smalldatetime. Las columnas correspondientes (en la misma posición ordinal en la lista de selección) de las tablas locales deben ser smalldatetime. Se trata de un cambio de comportamiento de versiones anteriores de SQL Server en que las columnas de tablas remotas de tipo smalldatetime que se hace referencia en una vista con particiones se asignan como datetime y las columnas correspondientes de las tablas locales deben ser del tipo datetime. Para obtener más información, vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).

  • Ningún servidor vinculado de la vista con particiones puede ser un servidor vinculado en bucle de retorno. Se trata de un servidor vinculado que apunta a la misma instancia de SQL Server.

El valor de la opción SET ROWCOUNT se pasa por alto para las acciones INSERT, UPDATE y DELETE que implican vistas con particiones y tablas remotas actualizables.

Cuando las tablas miembro y la definición de la vista con particiones están preparadas, el optimizador de consultas de SQL Server crea planes inteligentes que utilizan las consultas de forma eficaz para tener acceso a los datos de las tablas miembro. Con las definiciones de la restricción CHECK, el procesador de consultas asigna la distribución de valores clave entre las tablas miembro. Cuando un usuario emite una consulta, el procesador de consultas compara la asignación con los valores especificados en la cláusula WHERE y crea un plan de ejecución con una transferencia mínima de datos entre los servidores miembro. Por lo tanto, aunque algunas tablas miembro puedan estar ubicadas en servidores remotos, la instancia de SQL Server resuelve las consultas distribuidas de manera que la cantidad de datos distribuidos que haya que transferir sea mínima.

Para crear vistas con particiones en tablas miembro implicadas en la replicación, deben tenerse en cuenta las consideraciones siguientes:

  • Si las tablas subyacentes intervienen en la replicación de mezcla o la replicación transaccional con suscripciones de actualización, la uniqueidentifier columna también debe incluirse en la lista de selección.

    Las acciones INSERT en la vista con particiones deben proporcionar un valor NEWID() para la uniqueidentifier columna. Las acciones UPDATE en el uniqueidentifier columna debe proporcionar NEWID() como el valor porque no se puede usar la palabra clave DEFAULT.

  • La replicación de actualizaciones que se realiza mediante la vista es igual que cuando las tablas se replican en dos bases de datos distintas: agentes de replicación diferentes dan servicio a las tablas y no se garantiza el orden de las actualizaciones.

Se necesita el permiso CREATE VIEW en la base de datos y el permiso ALTER en el esquema en que se crea la vista.

A. Usar una instrucción CREATE VIEW sencilla

En el ejemplo siguiente se crea una vista mediante una instrucción SELECT sencilla. Una vista sencilla resulta útil cuando se consulta con frecuencia una combinación de columnas. Los datos de esta vista provienen de las tablas HumanResources.Employee y Person.Person de la base de datos AdventureWorks2012. Los datos proporcionan el nombre e información sobre la fecha de contratación de los empleados de Adventure Works Cycles. Esta vista puede crearse para la persona responsable del seguimiento de los aniversarios de trabajo pero sin concederle acceso a todos los datos de estas tablas.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL  
DROP VIEW hiredate_view ;  
GO  
CREATE VIEW hiredate_view  
AS   
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate  
FROM HumanResources.Employee e   
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  
  

B. Usar WITH ENCRYPTION

En el siguiente ejemplo se utiliza la opción WITH ENCRYPTION y se muestran columnas calculadas, columnas con el nombre cambiado y varias columnas.

Se aplica a: desde SQL Server 2008 hasta SQL Server 2016.
USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('Purchasing.PurchaseOrderReject', 'V') IS NOT NULL  
    DROP VIEW Purchasing.PurchaseOrderReject ;  
GO  
CREATE VIEW Purchasing.PurchaseOrderReject  
WITH ENCRYPTION  
AS  
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,   
    RejectedQty / ReceivedQty AS RejectRatio, DueDate  
FROM Purchasing.PurchaseOrderDetail  
WHERE RejectedQty / ReceivedQty > 0  
AND DueDate > CONVERT(DATETIME,'20010630',101) ;  
GO  
  

C. Usar WITH CHECK OPTION

En el siguiente ejemplo se muestra una vista denominada SeattleOnly que hace referencia a cinco tablas y permite modificar datos aplicados únicamente a los empleados que viven en Seattle.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('dbo.SeattleOnly', 'V') IS NOT NULL  
    DROP VIEW dbo.SeattleOnly ;  
GO  
CREATE VIEW dbo.SeattleOnly  
AS  
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode  
FROM HumanResources.Employee e  
INNER JOIN Person.Person p  
ON p.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN Person.BusinessEntityAddress bea   
    ON bea.BusinessEntityID = e.BusinessEntityID   
    INNER JOIN Person.Address a   
    ON a.AddressID = bea.AddressID  
    INNER JOIN Person.StateProvince sp   
    ON sp.StateProvinceID = a.StateProvinceID  
WHERE a.City = 'Seattle'  
WITH CHECK OPTION ;  
GO  
  

D. Usar funciones integradas dentro de una vista

En el siguiente ejemplo se muestra una definición de vista que incluye una función integrada. Al utilizar funciones, es necesario especificar un nombre de columna para la columna derivada.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('Sales.SalesPersonPerform', 'V') IS NOT NULL  
    DROP VIEW Sales.SalesPersonPerform ;  
GO  
CREATE VIEW Sales.SalesPersonPerform  
AS  
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales  
FROM Sales.SalesOrderHeader  
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)  
GROUP BY SalesPersonID;  
GO  
  

E. Usar datos con particiones

En el siguiente ejemplo se utilizan las tablas denominadas SUPPLY1, SUPPLY2, SUPPLY3 y SUPPLY4. Estas tablas corresponden a las tablas de proveedores de cuatro oficinas ubicadas en diferentes países o regiones.

--Create the tables and insert the values.  
CREATE TABLE dbo.SUPPLY1 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY2 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY3 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),  
supplier CHAR(50)  
);  
CREATE TABLE dbo.SUPPLY4 (  
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),  
supplier CHAR(50)  
);  
GO  
INSERT dbo.SUPPLY1 VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')  
, ('231', 'FarEast'), ('280', 'NZ')  
, ('321', 'EuroGroup'), ('442', 'UKArchip')  
, ('475', 'India'), ('521', 'Afrique');  
GO  
--Create the view that combines all supplier tables.  
CREATE VIEW dbo.all_supplier_view  
WITH SCHEMABINDING  
AS  
SELECT supplyID, supplier  
FROM dbo.SUPPLY1  
UNION ALL  
SELECT supplyID, supplier  
FROM dbo.SUPPLY2  
UNION ALL  
SELECT supplyID, supplier  
FROM dbo.SUPPLY3  
UNION ALL  
SELECT supplyID, supplier  
FROM dbo.SUPPLY4;  
  

F. Crear una vista sencilla

En el ejemplo siguiente se crea una vista, seleccione solo algunas de las columnas en la tabla de origen.

-- Uses AdventureWorks  
  
CREATE VIEW DimEmployeeBirthDates AS  
SELECT FirstName, LastName, BirthDate   
FROM DimEmployee;  

G. Crear una vista mediante la combinación de dos tablas

En el ejemplo siguiente se crea una vista mediante el uso de un SELECT instrucción con un OUTER JOIN. Los resultados de la consulta de combinación de rellenan la vista.

-- Uses AdventureWorks  
  
CREATE VIEW view1  
AS SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey, fis.SalesTerritoryKey, dst.SalesTerritoryRegion  
FROM FactInternetSales AS fis   
LEFT OUTER JOIN DimSalesTerritory AS dst   
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);  

ALTER TABLE ( Transact-SQL )
ALTER VIEW ( Transact-SQL )
ELIMINAR ( Transact-SQL )
ELIMINAR VISTA ( Transact-SQL )
INSERT ( Transact-SQL )
Crear un procedimiento almacenado
Sys.dm_sql_referenced_entities ( Transact-SQL )
Sys.dm_sql_referencing_entities ( Transact-SQL )
sp_help ( Transact-SQL )
sp_helptext ( Transact-SQL )
sp_refreshview ( Transact-SQL )
sp_rename ( Transact-SQL )
Sys.Views ( Transact-SQL )
ACTUALIZACIÓN ( Transact-SQL )
EVENTDATA ( Transact-SQL )

Adiciones de comunidad

AGREGAR
Mostrar: