Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido
Introduccin
Definicin de vistas
16
17
Procedimientos recomendados
23
Implementacin de vistas
Implementacin de vistas
Introduccin
Objetivo del tema
Explicacin previa
Definicin de vistas
Implementacin de vistas
Employees
Employees
Presentar el concepto de
vista y exponer un ejemplo.
EmployeeID
EmployeeID LastName
LastName
11
Davolio
Davolio
22
Fuller
Fuller
33
Leverling
Leverling
Explicacin previa
Firstname
Firstname
Nancy
Nancy
Andrew
Andrew
Janet
Janet
Title
Title
~~~
~~~
~~~
~~~
~~~
~~~
USE
USE Northwind
Northwind
GO
GO
CREATE
CREATE VIEW
VIEW dbo.EmployeeView
dbo.EmployeeView
AS
AS
SELECT
LastName,
SELECT LastName, Firstname
Firstname
FROM
FROM Employees
Employees
EmployeeView
EmployeeView
Lastname
Lastname
Davolio
Davolio
Fuller
Fuller
Leverling
Leverling
Sugerencia
Ejemplo
Firstname
Firstname
Nancy
Nancy
Andrew
Andrew
Janet
Janet
Consulta
Resultado
Lastname
FirstName
Davolio
Fuller
Leverling
.
.
.
(9 filas afectadas)
Nancy
Andrew
Janet
Implementacin de vistas
Explicacin previa
Mejorar el rendimiento
Implementacin de vistas
Mejorar el rendimiento
Las vistas le permiten almacenar los resultados de consultas complejas.
Otras consultas pueden utilizar estos resultados resumidos. Las vistas tambin
permiten dividir datos. Es posible colocar divisiones individuales en equipos
distintos.
Implementacin de vistas
Definicin de vistas
Objetivo del tema
Explicacin previa
Creacin de vistas
Implementacin de vistas
Creacin de vistas
Objetivo del tema
Explicacin previa
CREATE
CREATE VIEW
VIEW dbo.OrderSubtotalsView
dbo.OrderSubtotalsView (OrderID,
(OrderID, Subtotal)
Subtotal)
AS
AS
SELECT
SELECT OD.OrderID,
OD.OrderID,
SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
FROM
FROM [Order
[Order Details]
Details] OD
OD
GROUP
GROUP BY
BY OD.OrderID
OD.OrderID
GO
GO
Sintaxis
Sugerencia
Implementacin de vistas
Hay columnas con el mismo nombre en las tablas que se van a combinar.
Ejemplo 1
ste es un ejemplo de una vista que crea una columna (Subtotal) que calcula
los subtotales de un pedido a partir de las columnas UnitPrice, Quantity y
Discount.
CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal)
AS
SELECT OD.OrderID,
SUM(CONVERT
(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
FROM [Order Details] OD
GROUP BY OD.OrderID
GO
Ejemplo 2
Resultado
OrderID
Subtotal
10271
10977
10440
.
.
.
(830 filas afectadas)
48.0000
2233.0000
4924.1400
Implementacin de vistas
Explicacin previa
Orders
Customers
OrderID
OrderID CustomerID
CustomerID RequiredDate
RequiredDate ShippedDate
ShippedDate
10663
BONAP
1997-09-24
~~~
1997-10-03
BONAP
1997-09-24
~~~
1997-10-03
10663
10827
BONAP
1998-01-26
~~~
1998-02-06
BONAP
1998-01-26
~~~
1998-02-06
10827
10427
PICCO
1997-02-24
~~~
1997-03-03
PICCO
1997-02-24
~~~
1997-03-03
10427
10451
QUICK
1997-03-05
~~~
1997-03-12
QUICK
1997-03-05
~~~
1997-03-12
10451
10515
QUICK
1997-05-07
~~~
1997-05-23
QUICK
1997-05-07
~~~
1997-05-23
10515
CustomerID
CustomerID CompanyName
CompanyName
BONAP
BONAP
PICCO
PICCO
QUICK
QUICK
USE
USE Northwind
Northwind
GO
GO
CREATE
CREATE VIEW
VIEW dbo.ShipStatusView
dbo.ShipStatusView
AS
AS
SELECT
SELECT OrderID,
OrderID, ShippedDate,
ShippedDate, ContactName
ContactName
FROM
FROM Customers
Customers cc INNER
INNER JOIN
JOIN Orders
Orders oo
ON
ON c.CustomerID
c.CustomerID == O.CustomerID
O.CustomerID
WHERE
WHERE RequiredDate
RequiredDate << ShippedDate
ShippedDate
Bon
Bonapp'
app'
Piccolo
Piccolound
undmehr
mehr
QUICK-Stop
QUICK-Stop
ContactName
ContactName
Laurence
LaurenceLebihan
Lebihan
Georg
GeorgPipps
Pipps
Horst
Kloss
Horst Kloss
ShipStatusView
OrderID
OrderID ShippedDate
ShippedDate ContactName
ContactName
10264
10264
10271
10271
10280
10280
1996-08-23
1996-08-21
1996-08-23
1996-08-21Laurence
LaurenceLebihan
Lebihan
1996-08-30
1996-08-29
1996-08-30
1996-08-29Georg
GeorgPipps
Pipps
1996-09-12
1996-09-11
1996-09-12
1996-09-11Horst
HorstKloss
Kloss
Resultado
OrderID
ShippedDate
10264
10271
10280
.
.
.
(37 filas afectadas)
1996-08-23
1996-08-30
1996-09-12
ContactName
Maria Larsson
Art Braunschweiger
Christina Berglund
Implementacin de vistas
Alteracin de vistas
USE
USE Northwind
Northwind
GO
GO
ALTER
ALTER VIEW
VIEW dbo.EmployeeView
dbo.EmployeeView
AS
AS
SELECT
SELECT LastName,
LastName, FirstName,
FirstName, Extension
Extension
FROM
FROM Employees
Employees
Explicacin previa
Es posible alterar una
vista existente.
z
z
Eliminacin de vistas
DROP
DROP VIEW
VIEW dbo.ShipStatusView
dbo.ShipStatusView
Alteracin de vistas
La instruccin ALTER VIEW cambia la definicin de una vista, incluidas
las vistas de ndices, sin afectar a los procedimientos almacenados o
desencadenadores dependientes. Esto le permite conservar los permisos
de la vista. Esta instruccin est sujeta a las mismas restricciones que CREATE
VIEW. Si quita una vista y la vuelve a crear, deber volver a asignar los
permisos asociados a ella.
Sintaxis
Implementacin de vistas
Ejemplo
10
Consulta
USE Northwind
GO
ALTER VIEW dbo.EmployeeView
AS
SELECT LastName, FirstName, Extension
FROM employees
SELECT * from dbo.EmployeeView
Resultado
Lastname
FirstName
Extension
Davolio
Fuller
Leverling
.
.
.
(9 filas afectadas)
Nancy
Andrew
Janet
5467
3457
3355
Sugerencia
Eliminacin de vistas
Si ya no necesita una vista, puede quitar su definicin de la base de datos con la
instruccin DROP VIEW. Al quitar una vista se quita su definicin y todos los
permisos que tenga asignados. Adems, si los usuarios consultan vistas que
hagan referencia a la vista quitada, obtendrn un mensaje de error. Sin embargo,
al quitar una tabla que hace referencia a una vista, sta no se quita
automticamente. Es necesario quitarla de forma explcita.
Nota El permiso para quitar una vista corresponde a su propietario y no es
transferible. Es la configuracin predeterminada. Sin embargo, el administrador
del sistema o el propietario de la base de datos pueden quitar cualquier objeto si
especifican el nombre de su propietario en la instruccin DROP VIEW.
Implementacin de vistas
11
Presentar el concepto de
cadenas de pertenencia.
Ejemplo:
Explicacin previa
maria.view2
Maria ejecuta:
lucia.view1
GRANT
GRANT SELECT
SELECT ON
ON view2
view2 TO
TO pierre
pierre
Pierre ejecuta:
lucia.table1
SELECT
SELECT ** FROM
FROM maria.view2
maria.view2
SQL Server permite que el propietario del objeto original conserve el control de
qu usuarios tienen autorizacin de acceso al mismo.
Sintaxis
Implementacin de vistas
12
Explicacin previa
Para alterar la definicin de una vista o comprender cmo se obtienen sus datos
a partir de las tablas base, puede ser necesario ver su definicin.
Muestra informacin
acerca de
INFORMATION_SCHEMA.TABLES o sysobjects
Nombres de vistas.
INFORMATION_SCHEMA.VIEW_TABLE_USAGE o sysdepends
INFORMATION_SCHEMA.VIEWS o syscomments
Definicin de vistas.
INFORMATION_SCHEMA.VIEW_COLUMN_USAGE o syscolumns
Nota INFORMATION_SCHEMA.VIEW_TABLE_USAGE e
INFORMATION_SCHEMA.VIEW_COLUMN_USAGE slo muestran
informacin referida a su nombre de usuario.
Implementacin de vistas
13
Para mostrar el texto utilizado para crear una vista puede usar el Administrador
corporativo de SQL Server, consultar INFORMATION_SCHEMA.VIEWS o
ejecutar el procedimiento almacenado de sistema sp_helptext con el nombre de
la vista como parmetro.
Sintaxis
Sugerencia
sp_helptext nombreObjeto
Sintaxis
sp_depends nombreObjeto
Implementacin de vistas
14
Explicacin previa
USE
USE Northwind
Northwind
GO
GO
CREATE
CREATE VIEW
VIEW dbo.[Order
dbo.[Order Subtotals]
Subtotals]
WITH
WITH ENCRYPTION
ENCRYPTION
AS
AS
SELECT
SELECT OrderID,
OrderID,
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
AS
AS Subtotal
Subtotal
FROM
FROM [Order
[Order Details]
Details]
GROUP
BY
GROUP BY OrderID
OrderID
GO
GO
Debido a que los usuarios pueden mostrar la definicin de una vista mediante
el Administrador corporativo de SQL Server, por medio de consultas a
INFORMATION_SCHEMA.VIEWS o consultas a la tabla del sistema
syscomments, puede que desee ocultar ciertas definiciones de vistas.
Implementacin de vistas
15
Implementacin de vistas
16
Exponer consideraciones
que los alumnos deben
tener presentes al modificar
datos mediante vistas.
Explicacin previa
Las vistas no mantienen una copia aparte de los datos sino que muestran el
conjunto de resultados de una consulta de una o varias tablas base. Por ello,
al modificar los datos de una vista, en realidad se modifica la tabla base.
Con algunas restricciones, es posible insertar, actualizar o eliminar libremente
datos de una tabla a travs de una vista. En general, la vista debe estar basada
en una sola tabla y no debe incluir funciones de agregado o clusulas GROUP
BY en la instruccin SELECT.
Especficamente, las modificaciones realizadas a travs de vistas:
Implementacin de vistas
17
Explicacin previa
Implementacin de vistas
18
Explicacin previa
Si desea aprovechar el
trabajo que ya ha hecho,
puede crear una vista de
otra vista. Sin embargo,
debe tener en cuenta los
posibles problemas de
rendimiento que ello implica.
USE
USE Northwind
Northwind
GO
GO
CREATE
CREATE VIEW
VIEW dbo.TopSalesView
dbo.TopSalesView
AS
AS
SELECT
SELECT **
FROM
FROM dbo.TotalPurchaseView
dbo.TotalPurchaseView
WHERE
WHERE Subtotal
Subtotal >> 50000
50000
GO
GO
Customers
Customers
11Orders
~~
~~
~~ nn
Orders
Order
~~ ~ Details
~Details
2 11~ Order
~ ~ ~~n nn
2 1~ ~
3322~~1~~ ~
2 ~
4433~~2~~ ~
3 ~
5544~~3~~ ~
4 ~
5
66 5~~4~~ ~
66 55~~ ~~
66 ~~
~ ~
~~~~ ~
~
~~~~ ~
~
~~~~ ~
~
~
~~ ~ ~
~~ ~~
~~
~ ~n ~
~~~~yy~nn ~
~ ~
~~~~yy~yy ~
~ ~
~~~~nn~yy ~
~ ~
~
~~ ~yy~nn ~
~~ ~~yy ~~
~~ ~~
TotalPurchaseView
View
TotalPurchase
TotalPurchaseView
11 ~~ ~~ ~~ ~~
22 ~~ ~~ ~~ ~~
33 ~~ ~~ ~~ ~~
44 ~~ ~~ ~~ ~~
55 ~~ ~~ ~~ ~~
66
~~
~~
~~
TopSalesView
TopSalesView
~~ ~~ ~~
~~ ~~ ~~
~~ ~~ ~~
SELECT **
~~ SELECT
FROM
FROM dbo.TopSalesView
dbo.TopSalesView
WHERE
WHERE CompanyName
CompanyName == 'Ernst
'Ernst Handel'
Handel'
Cuando se anidan en una vista otras vistas que combinan varias tablas y
evalan expresiones complejas, el origen inmediato de los posibles problemas
de rendimiento puede ser difcil de determinar. En consecuencia, puede ser
conveniente crear definiciones de vistas separadas, en lugar de anidarlas.
Ejemplo
Sugerencia
Implementacin de vistas
19
USE Northwind
GO
CREATE VIEW dbo.TotalPurchaseView
AS
SELECT CompanyName, Sum(CONVERT(money,
(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal
FROM Customers c INNER JOIN Orders o
ON c.CustomerID=o.CustomerID
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
GROUP BY CompanyName
GO
Consulta
Resultado
CompanyName
Subtotal
Ernst Handel
104874.98
(1 fila(s) afectada(s))
Implementacin de vistas
20
Explicacin previa
Utilizar si:
z
z
z
Es posible crear ndices en las vistas. Una vista indizada almacena el conjunto
de resultados de una vista en la base de datos. Debido a que la velocidad de
recuperacin es rpida, puede utilizar vistas indizadas para mejorar el
rendimiento de las consultas.
Implementacin de vistas
21
El primer ndice que crea en una vista debe ser un ndice agrupado nico.
Nota Para estar seguro de que puede indizar una vista debe utilizar la
propiedad IsIndexable de la funcin OBJECTPROPERTY.
Implementacin de vistas
22
Explicacin previa
Puede utilizar vistas para dividir datos entre varias bases de datos o copias de
SQL Server y as mejorar el rendimiento.
Implementacin de vistas
23
Procedimientos recomendados
Objetivo del tema
Presentar algunas
recomendaciones para
el uso de las vistas.
Use
Use una
una convencin
convencin de
de nomenclatura
nomenclatura estndar
estndar
Explicacin previa
dbo
dbo debe
debe ser
ser el
el propietario
propietario de
de todas
todas las
las vistas
vistas
Compruebe
Compruebe las
las dependencias
dependencias de
de los
los objetos
objetos antes
antes de
de quitarlos
quitarlos
No
No elimine
elimine nunca
nunca las
las entradas
entradas de
de la
la tabla
tabla del
del sistema
sistema
syscomments
syscomments
Evale
Evale cuidadosamente
cuidadosamente la
la creacin
creacin de
de vistas
vistas basadas
basadas en
en otras
otras
vistas
vistas
Especifique dbo como propietario al crear las vistas. El dbo debe poseer
todos los objetos a los que se hace referencia en la definicin de vista. Con
ello no tendr que especificar el nombre del propietario al consultar la vista,
ya que el propietario de la base de datos es el propietario predeterminado.
Adems, el propietario de la base de datos tiene permisos en todos los
objetos subyacentes de la base de datos, lo que evita la posibilidad de que
se interrumpan las cadenas de propiedad.
Implementacin de vistas
24
Buscar en
CREATE VIEW
crear vista
ALTER VIEW
alterar vista
DROP VIEW
quitar vista
Cadenas de pertenencia
interrumpidas
cadena de pertenencia
Generacin de secuencias
de comandos SQL