Está en la página 1de 5

1

Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
VI. VISTAS EN SQL 2008
VIS1AS
una vlsLa es una Labla vlrLual cuyo conLenldo esL deflnldo por una consulLa. Al lgual que una Labla
real, una vlsLa consLa de un con[unLo de columnas y fllas de daLos con un nombre. Sln embargo, a
menos que esLe lndexada, una vlsLa no exlsLe como con[unLo de valores de daLos almacenados en
una base de daLos. Las fllas y las columnas de daLos proceden de Lablas a las que se hace
referencla en la consulLa que deflne la vlsLa y se producen de forma dlnmlca cuando se hace
referencla a la vlsLa.
una vlsLa acLua como fllLro de las Lablas subyacenLes a las que se hace referencla en ella.
La consulLa que deflne la vlsLa puede provenlr de una o de varlas Lablas, o blen de oLras vlsLas de
la base de daLos acLual u oLras bases de daLos. Aslmlsmo, es poslble uLlllzar las consulLas
dlsLrlbuldas para deflnlr vlsLas que uLlllcen daLos de orlgenes heLerogeneos. LsLo puede resulLar de
uLllldad, por e[emplo, sl desea comblnar daLos de esLrucLura slmllar que proceden de dlsLlnLos
servldores, cada uno de los cuales almacena los daLos para una regln dlsLlnLa de la organlzacln.
no exlsLe nlnguna resLrlccln a la hora de consulLar vlsLas y muy pocas resLrlcclones a la hora de
modlflcar los daLos de esLas.
Ln esLa llusLracln se muesLra una vlsLa basada en dos Lablas.
2
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Las prlnclpales razones por las que podemos crear vlsLas son:
Segur|dad, nos pueden lnLeresar que los usuarlos Lengan acceso a una parLe de la
lnformacln que hay en una Labla, pero no a Loda la Labla.
Comod|dad, como hemos dlcho el modelo relaclonal no es el ms cmodo para vlsuallzar
los daLos, lo que nos puede llevar a Lener que escrlblr comple[as senLenclas SCL, Lener una
vlsLa nos slmpllflca esLa Larea.
Las vlsLas no Llenen una copla flslca de los daLos, son consulLas a los daLos que hay en las Lablas,
por lo que sl acLuallzamos los daLos de una vlsLa, esLamos acLuallzando realmenLe la Labla, y sl
acLuallzamos la Labla esLos camblos sern vlslbles desde la vlsLa.
noLa: no slempre podremos acLuallzar los daLos de una vlsLa, depender de la comple[ldad de la
mlsma (depender de sl el con[unLo de resulLados Llene acceso a la clave prlnclpal de la Labla o
no).
AnLes de crear una vlsLa, consldere las slgulenLes lndlcaclones:
Slo puede crear vlsLas en la base de daLos acLual. Sln embargo, las Lablas y las vlsLas a las
que se haga referencla desde la nueva vlsLa pueden enconLrarse en oLras bases de daLos e,
lncluso, en oLros servldores, sl la vlsLa se deflne medlanLe consulLas dlsLrlbuldas.
Los nombres de las vlsLas deben segulr las reglas que se apllcan a los ldenLlflcadores y ser
unlcos para cada esquema. Adems, el nombre debe ser dlsLlnLo del de las Lablas lncluldas
en ese esquema.
Ls poslble generar vlsLas denLro de oLras vlsLas. MlcrosofL SCL Server permlLe anldar
vlsLas.Ll anldamlenLo no debe superar los 32 nlveles. Ls poslble que el llmlLe real del
anldamlenLo de vlsLas sea lnferlor en funcln de la comple[ldad de la vlsLa y de la memorla
dlsponlble.
no puede asoclar con las vlsLas reglas nl deflnlclones uLlAuL1.
Los desencadenadores Al1L8 no se pueden asoclar con las vlsLas, slo se pueden asoclar
los desencadenadores lnS1LAu Cl.
3
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
La consulLa que deflne la vlsLa no puede lnclulr las clusulas CCMu1L nl CCMu1L 8?, y
Lampoco puede lnclulr la palabra clave ln1C.
La consulLa que deflne la vlsLa no puede lnclulr la clusula C8uL8 8?, a menos que
Lamblen haya una clusula 1C en la llsLa de seleccln de la lnsLruccln SLLLC1.
La consulLa que deflne la vlsLa no puede lnclulr la clusula C1lCn que especlflca una
sugerencla de consulLa.
La consulLa que deflne la vlsLa no puede lnclulr la clusula 1A8LLSAMLL.
no se pueden deflnlr deflnlclones de lndlce de LexLo compleLo en las vlsLas.
no se pueden crear vlsLas Lemporales, nl vlsLas denLro de Lablas Lemporales.
Las vlsLas, las Lablas o las funclones que parLlclpan en una vlsLa creada con la clusula
SCPLMA8lnulnC no se pueden qulLar, a menos que se qulLe o camble esa vlsLa de forma
que de[e de Lener un enlace de esquema. Adems, las lnsLrucclones AL1L8 1A8LL sobre
Lablas que parLlclpan en vlsLas que Llenen enlaces de esquemas provocarn un error sl
esLas lnsLrucclones afecLan a la deflnlcln de la vlsLa.
Sl una vlsLa no se crea con la clusula SCPLMA8lnulnC, debe e[ecuLarse sp_refreshvlew
cuando se reallcen camblos en los ob[eLos subyacenLes de la vlsLa que afecLen a la
deflnlcln de esLa. ue lo conLrarlo, la vlsLa puede generar resulLados lnesperados cuando
se reallza una consulLa.
no puede emlLlr consulLas de LexLo compleLo en una vlsLa, aunque una deflnlcln de vlsLa
puede lnclulr una consulLa de LexLo compleLo sl esLa hace referencla a una Labla
conflgurada para la lndlzacln de LexLo compleLo.
uebe especlflcar el nombre de Lodas las columnas de la vlsLa en el caso de que:
l. Alguna de las columnas de la vlsLa derlve de una expresln arlLmeLlca, una funcln
lnLegrada o una consLanLe.
ll. uos o ms columnas de la vlsLa Luvlesen, en caso conLrarlo, el mlsmo nombre
(normalmenLe, debldo a que la deflnlcln de la vlsLa lncluye una comblnacln y las
columnas de dos o ms Lablas dlferenLes Llenen el mlsmo nombre).
lll. uesee darle a una columna de la vlsLa un nombre dlsLlnLo del de la columna de la
que derlva. (1amblen puede camblar el nombre de las columnas en la vlsLa). una
columna de una vlsLa hereda los Llpos de daLos de la columna de la que derlva,
aunque no camble su nombre.
4
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
CkLACICN DL VIS1AS.
ara crear una vlsLa debemos uLlllzar la senLencla C8LA1L vlLW, deblendo proporclonar un
nombre a la vlsLa y una senLencla SCL SLLLC1 vllda.
CkLA1L VILW <nombre_v|sta>
AS
(<sentenc|a_se|ect>),
L[emplo: Crear una vlsLa sobre la Labla alqulleres, en la que se nos muesLre el nombre y apellldos
del cllenLe en lugar de su cdlgo.
CkLA1L VILW vA|qu||eres
AS
(
SLLLC1 nombre,
ape|||dos,
matr|cu|a
IkCM tA|qu||eres,
tC||entes
WnLkL ( tA|qu||eres.cod|go_c||ente = tC||entes.cod|go )
)
Sl queremos, modlflcar la deflnlcln de nuesLra vlsLa podemos uLlllzar la senLencla AL1L8 vlLW, de
forma muy pareclda de cmo se reallza con las Lablas. Ln esLe caso queremos anadlr los
campos fx_alquller y fx_devoluclon a la vlsLa.
AL1Lk VILW vA|qu||eres
AS
(
SLLLC1 nombre,
ape|||dos,
matr|cu|a,
fx_a|qu||er,
fx_devo|uc|on
3
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
IkCM tA|qu||eres,
tC||entes
WnLkL ( tA|qu||eres.cod|go_c||ente = tC||entes.cod|go )
)
or ulLlmo podemos ellmlnar la vlsLa a Lraves de la senLencla u8C vlLW. ara ellmlnar la vlsLa
que hemos creado anLerlormenLe se uLlllzarla:
DkC VILW vA|qu||eres,

También podría gustarte