Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de análisis SQL en Microsoft Fabric
Warehouse en Microsoft Fabric
Base de datos SQL de Microsoft Fabric
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.
Convenciones de sintaxis de Transact-SQL
Sintaxis
Sintaxis para SQL Server y 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 ]
}
Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Sintaxis para Microsoft Fabric Data Warehouse y el punto de conexión de SQL Analytics.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Argumentos
O ALTER
Se aplica a: Azure SQL Database y SQL Server (a partir de SQL Server 2016 (13.x) SP1).
Altera la vista condicionalmente 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 requiere un nombre de columna cuando una columna se deriva de una expresión aritmética, una función o una constante; cuando dos o más columnas podrían tener el mismo nombre, normalmente debido a una combinación; o cuando se especifica una columna en una vista un nombre diferente al de la columna a partir de la que se deriva. Los nombres de columna también se pueden asignar en la SELECT
instrucción .
Si no se especifica la columna , las columnas de vista adquieren los mismos nombres que las columnas de la SELECT
instrucción .
Nota
En las columnas de la vista, los permisos para un nombre de columna se aplican en una CREATE VIEW
instrucción o ALTER VIEW
, independientemente del origen de los datos subyacentes. Por ejemplo, si se conceden permisos en la SalesOrderID
columna de una instrucción CREATE VIEW, una ALTER VIEW
instrucción puede asignar un nombre a la SalesOrderID
columna con un nombre de columna diferente, como OrderRef
, y seguir teniendo los permisos asociados a la vista mediante SalesOrderID
.
COMO
Especifica las acciones que va a llevar a cabo la vista.
select_statement
Instrucción SELECT
que define la vista. Dicha instrucción puede utilizar más de una tabla y otras vistas. Los permisos adecuados son necesarios para seleccionar entre los objetos a los que se hace referencia en la SELECT
cláusula de la vista que se crea.
Una vista no tiene que ser un subconjunto de las filas y columnas de una tabla determinada. Se puede crear una vista que use más de una tabla u otras vistas con una SELECT
cláusula de cualquier complejidad.
En una definición de vista indizada, la SELECT
instrucción debe ser una sola instrucción de tabla o una tabla JOIN
múltiple con agregación opcional.
Las SELECT
cláusulas de una definición de vista no pueden incluir:
Una
ORDER BY
cláusula, a menos que también haya unaTOP
cláusula en la lista de selección de laSELECT
instrucciónImportante
La
ORDER BY
cláusula solo se usa para determinar las filas que devuelve laTOP
cláusula oOFFSET
en la definición de vista. LaORDER BY
cláusula no garantiza resultados ordenados cuando se consulta la vista, a menosORDER BY
que también se especifique en la propia consulta.La palabra clave
INTO
.La
OPTION
cláusulaUna referencia a una tabla temporal o a una variable de tabla
Dado que select_statement usa la SELECT
instrucción , es válido usar sugerencias de combinación y sugerencias de tabla como se especifica en la FROM
cláusula . Para obtener más información, consulte FROM (Transact-SQL) y SELECT (Transact-SQL).
Las funciones y varias SELECT
instrucciones separadas por UNION
o UNION ALL
se pueden usar en select_statement.
CHECK OPTION
Fuerza que todas las instrucciones de modificación de datos que se ejecuten en la vista sigan los criterios establecidos en select_statement. Cuando se modifica una fila a través de una vista, WITH CHECK OPTION
se asegura de que los datos permanecen visibles a través de la vista después de confirmar la modificación.
Nota
Solo CHECK OPTION
se aplica a las actualizaciones realizadas a través de la vista. No tiene ninguna aplicabilidad en las actualizaciones realizadas directamente en las tablas subyacentes de una vista.
ENCRIPTACIÓN
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, y Azure SQL Database.
Cifra las entradas de sys.syscomments que contienen el texto de la CREATE VIEW
instrucción . El uso WITH ENCRYPTION
impide 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 SCHEMABINDING
se especifica , la tabla base o las tablas no se pueden modificar de una manera que afecte a la definición de 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 usa SCHEMABINDING
, el select_statement debe incluir los nombres de dos partes (esquema).object) de tablas, vistas o funciones definidas por el usuario a las que se hace referencia. Todos los objetos a los que se hace referencia se deben encontrar en la misma base de datos.
Las vistas o las tablas que participan en una vista creada con la cláusula SCHEMABINDING no se pueden quitar a menos que se quite o cambie esa vista de forma que deje de tener un enlace de esquema. En caso contrario, Motor de base de datos genera un error. Además, la ejecución de instrucciones ALTER TABLE
en tablas que participan en vistas que tienen un enlace de esquema produce un error cuando estas instrucciones afectan a la definición de 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.
En el caso de las vistas creadas con VIEW_METADATA
, los metadatos del modo de exploración devuelven el nombre de vista y no los nombres de tabla base cuando describe las columnas de la vista en el conjunto de resultados.
Cuando se crea una vista mediante WITH VIEW_METADATA
, todas sus columnas, excepto una columna de marca de tiempo , son actualizables si la vista tiene INSTEAD OF INSERT
o INSTEAD OF UPDATE
desencadena. Para obtener más información acerca de las vistas actualizables, vea la sección Notas.
Observaciones
Una vista solo se puede crear en la base de datos actual.
CREATE VIEW
debe ser la primera instrucción de un lote de consulta. 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 SCHEMABINDING
cláusula , ejecute sp_refreshview cuando se realicen cambios en los objetos subyacentes a la vista que afecta 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, la información sobre ella se almacena en estas vistas de catálogo: sys.views, sys.columns y sys.sql_expression_dependencies. El texto de la CREATE VIEW
instrucción se almacena en la vista de catálogo sys.sql_modules .
Una consulta que usa un índice en una vista definida con expresiones numéricas o flotantes podría tener un resultado diferente de una consulta similar que no usa el índice en la vista. Esta diferencia puede deberse a errores de redondeo durante INSERT
las acciones , DELETE
o UPDATE
en las tablas subyacentes.
El motor de base de datos guarda la configuración de SET QUOTED_IDENTIFIER
y SET ANSI_NULLS
cuando se crea una vista. Esta configuración original se utiliza para analizar la vista cuando ésta se utiliza. Por lo tanto, cualquier configuración de sesión de cliente para SET QUOTED_IDENTIFIER
y SET ANSI_NULLS
no afecta a la definición de vista cuando se accede a la vista.
En Azure Synapse Analytics, las vistas no admiten el enlace de esquemas. Por lo tanto, si se realizan cambios en los objetos subyacentes, debe quitar y volver a crear la vista para actualizar los metadatos subyacentes. Para obtener más información, vea Vistas de T-SQL con grupos de SQL dedicados y grupos de SQL sin servidor en Azure Synapse Analytics.
En Azure Synapse Analytics, no se admiten vistas actualizables, desencadenadores DML (de tipo AFTER
o INSTEAD OF
) y vistas con particiones. Para obtener más información, vea Vistas de T-SQL con grupos de SQL dedicados y grupos de SQL sin servidor en Azure Synapse Analytics.
En Azure Synapse Analytics, no se admiten vistas con particiones. Para obtener más información, vea Vistas de T-SQL con grupos de SQL dedicados y grupos de SQL sin servidor en Azure Synapse Analytics.
En la base de datos SQL de Fabric, se pueden crear vistas, pero no se reflejan en Fabric OneLake. Para obtener más información, consulte Limitaciones de la creación de reflejo de la base de datos SQL de Fabric.
Vistas actualizables
Es posible modificar los datos de una tabla base subyacente mediante una vista, siempre que se cumplan las siguientes condiciones:
Las modificaciones, incluidas
UPDATE
las instrucciones ,INSERT
yDELETE
, deben hacer referencia a columnas de una sola tabla base.Las columnas que se vayan a modificar en la vista deben hacer referencia directa a los datos subyacentes de las columnas de la tabla. Las columnas no se pueden obtener de otra forma, como las siguientes:
Función de agregado:
AVG
, ,COUNT
SUM
,MIN
,MAX
GROUPING
,STDEV
, ,STDEVP
, ,VAR
yVARP
.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 modifican no se ven afectadas por
GROUP BY
las cláusulas ,HAVING
oDISTINCT
.TOP no se usa en ninguna parte del select_statement de la vista junto con la
WITH CHECK OPTION
cláusula .
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 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
INSTEAD OF
Los desencadenadores se pueden crear en una vista para que una vista sea actualizable. ElINSTEAD OF
desencadenador 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 unINSTEAD OF
desencadenador para una vista en una instrucción de modificación de datos específica (INSERT
,UPDATE
oDELETE
), la vista correspondiente se puede actualizar a través de esa instrucción. Para obtener más información sobreINSTEAD OF
los desencadenadores, consulte 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.
Vistas con particiones
Una vista con particiones es una vista definida por una UNION ALL
de las tablas miembro estructuradas de la misma manera, pero almacenadas por separado como varias tablas en 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.
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, vea Partitioned Tables and Indexes.
Al diseñar un esquema de creación de particiones, debe ser 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 member 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;
Condiciones para crear vistas con particiones
La
list
de selecciónEn la lista de columnas de la definición de vistas, seleccione todas las columnas en las tablas miembro.
Asegúrese de que las columnas que se encuentren en la misma posición ordinal de cada
select list
son del mismo tipo, incluidas las intercalaciones. No es suficiente para que las columnas sean tipos implícitamente convertibles, como suele ser el caso deUNION
.Además, al menos una columna (por ejemplo
<col>
) debe aparecer en todas las listas de selección en la misma posición ordinal. Defina<col>
de manera que las tablas miembroT1, ..., Tn
tengan restricciones CHECKC1, ..., Cn
definidas en<col>
, respectivamente.La restricción
C1
definida en la tablaT1
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 restriccionesC1, ..., 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. La columna de creación de particiones puede tener nombres diferentes 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 habilitar la comprobación de restricciones mediante laCHECK CONSTRAINT *constraint_name*
opción deALTER TABLE
y use laWITH CHECK
opción 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.
Columna de partición
La columna de partición forma parte de la restricción PRIMARY KEY de la tabla.
No puede ser una columna calculada, de identidad, predeterminada o timestamp.
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, asegúrese de que solo hay 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.
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, consulte 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 combinan con la
UNION ALL
instrucción .Las tablas miembro no pueden tener índices creados en columnas calculadas de la tabla.
Las tablas miembro deben tener todas las restricciones PRIMARY KEY 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 mediante la opción de opciones de usuario en
sp_configure
o la instrucción SET.
Condiciones para modificar datos en vistas con particiones
Las siguientes restricciones se aplican a instrucciones que modifican datos en vistas con particiones:
La
INSERT
instrucción proporciona valores para todas las columnas de la vista, incluso si las tablas miembro subyacentes tienen unaDEFAULT
restricción para esas columnas o si permiten valoresNULL
. Para las columnas de la tabla miembro que tienenDEFAULT
definiciones, las instrucciones no pueden usar explícitamente la palabra claveDEFAULT
.El valor que se va a insertar en la columna de partición satisface al menos una de las restricciones subyacentes; De lo contrario, se produce un error en la acción de inserción con una infracción de restricción.
UPDATE
las instrucciones no pueden especificar laDEFAULT
palabra clave como un valor en laSET
cláusula , incluso si la columna tiene unDEFAULT
valor definido en la tabla miembro correspondiente.Las columnas de la vista que son una columna de identidad en una o varias de las tablas miembro no se pueden modificar mediante una
INSERT
instrucción oUPDATE
.Si una de las tablas miembro contiene una columna de marca de tiempo , los datos no se pueden modificar mediante una
INSERT
instrucción oUPDATE
.Si una de las tablas miembro contiene un desencadenador o una
ON UPDATE CASCADE/SET NULL/SET DEFAULT
ON DELETE CASCADE/SET NULL/SET DEFAULT
restricción, no se puede modificar la vista.INSERT
Las acciones ,UPDATE
yDELETE
en una vista con particiones no se permiten si hay una autocombinación con la misma vista o con cualquiera de las tablas miembro de la instrucción .La importación masiva de datos en una vista con particiones no es compatible con
bcp
lasBULK INSERT
instrucciones yINSERT ... SELECT * FROM OPENROWSET(BULK...)
. Sin embargo, puede insertar varias filas en una vista con particiones utilizando la instrucción INSERT.Nota
Para actualizar una vista con particiones, el usuario debe tener
INSERT
permisos ,UPDATE
yDELETE
en las tablas miembro.
Condiciones adicionales para las vistas con particiones distribuidas
A las vistas con particiones distribuidas (cuando una o varias tablas miembro son remotas) se les aplican las siguientes condiciones adicionales:
Se inicia una transacción distribuida para garantizar la atomicidad en todos los nodos afectados por la actualización.
Establezca la
XACT_ABORT SET
opción enON
para queINSERT
las instrucciones ,UPDATE
oDELETE
funcionen.Cualquier columna de las tablas remotas de tipo smallmoney a la que se haga referencia en una vista con particiones se asignará como money. Por lo tanto, las columnas correspondientes (en la misma posición ordinal de la lista de selección) de las tablas locales deben ser también de tipo money.
En el nivel 110 y posteriores de compatibilidad de bases de datos, cualquier columna de las tablas remotas de tipo smalldatetime a la que se haga referencia en una vista con particiones se asignará como smalldatetime. Las columnas correspondientes (en la misma posición ordinal en la lista de selección) de las tablas locales deben ser smalldatetime. Esto representa un cambio de comportamiento con respecto a versiones anteriores de SQL Server, en las que las columnas de tablas remotas de tipo smalldatetime a las que se hace referencia en una vista con particiones se asignan como datetime y las columnas correspondientes de las tablas locales deben ser de tipo datetime. Para obtener más información, consulte 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.
La configuración de la SET ROWCOUNT
opción se omite para INSERT
las acciones , UPDATE
y DELETE
que implican vistas con particiones actualizables y tablas remotas.
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 CHECK
definiciones de restricción, el procesador de consultas asigna la distribución de valores de clave en las tablas miembro. Cuando un usuario emite una consulta, el procesador de consultas compara el mapa con los valores especificados en la WHERE
cláusula y crea un plan de ejecución con una cantidad mínima de transferencia de datos entre servidores miembros. Por lo tanto, si algunas tablas miembro se encuentran en servidores remotos, la instancia de SQL Server resuelve las consultas distribuidas para que la cantidad de datos distribuidos que se tengan que transferir sea mínima.
Consideraciones para la replicación
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 en la replicación transaccional con suscripciones de actualización, asegúrese de que la columna uniqueidentifier también se incluye en la lista de selección.
Las
INSERT
acciones en la vista con particiones deben proporcionar unNEWID()
valor para la columna uniqueidentifier . Las acciones UPDATE en la columna uniqueidentifier deben proporcionarseNEWID()
como 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.
Permisos
Se necesita el permiso CREATE VIEW en la base de datos y el permiso ALTER en el esquema en que se crea la vista.
Ejemplos
Los ejemplos siguientes usan la base de datos AdventureWorks2022
o AdventureWorksDW2022
.
A Usar CREATE VIEW para crear una vista
En el ejemplo siguiente se crea una vista mediante una SELECT
instrucción . 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 AdventureWorks2022. 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.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Uso de 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: SQL Server 2008 (10.0.x) y versiones posteriores, y SQL Database.
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 dbo.SeattleOnly
que hace referencia a cinco tablas y permite modificar datos aplicados únicamente a los empleados que viven en Seattle.
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. Uso de 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.
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. Uso de 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 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
--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;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
F. Crear una vista mediante la combinación de dos tablas
En el ejemplo siguiente se crea una vista mediante una instrucción SELECT
con OUTER JOIN
. Los resultados de la consulta de combinación rellenan la vista.
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);
Contenido relacionado
- MODIFICAR TABLA (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (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)
- UPDATE (Transact-SQL)
- EVENTDATA (Transact-SQL)