En SQL Server, puede realizar consultas como vistas. Las vistas son beneficiosas por muchas razones, incluidas la seguridad, la facilidad de uso y la comodidad.
En SQL Server, una vista es una tabla virtual cuyo contenido se define mediante una consulta. Básicamente es una consulta escrita previamente que se almacena en la base de datos.
Una vista consta de un SELECT
declaración, y cuando ejecuta una consulta en la vista, ve los resultados de la misma como lo haría al abrir una tabla. Las vistas se denominan tablas virtuales porque pueden reunir datos de varias tablas, así como datos agregados, y presentarlos como si se tratara de una sola tabla.
Beneficios de las vistas
Una vista puede ser útil cuando hay múltiples usuarios con diferentes niveles de acceso, quienes necesitan ver partes de los datos en la base de datos (pero no necesariamente todos los datos). Las vistas pueden hacer lo siguiente:
- Restringir el acceso a filas específicas en una tabla
- Restringir el acceso a columnas específicas en una tabla
- Une columnas de varias tablas y preséntalas como si fueran parte de una sola tabla
- Presenta información agregada (como los resultados del
COUNT()
función)
Cómo crear una vista
Creas una vista usando CREATE VIEW
instrucción, seguida de SELECT
declaración.
CREATE VIEW ViewName AS SELECT ...
Ahora crearemos una vista a partir de nuestra consulta anterior.
-
Diseña la vista
Tome la consulta de nuestro ejemplo anterior y prefijela con CREATE VIEW RecentAlbums AS .
También elimine el
ORDER BY
porque las vistas no admiten esta cláusula (a menos queTOP
,OFFSET
oFOR XML
también se especifica).También agregue un punto y coma al final de la declaración, como un terminador de declaración (más sobre eso a continuación).
Código de muestra
A continuación se muestra el código de nuestro ejemplo, con
ORDER BY
Se eliminó la cláusula y se agregó un punto y coma como terminador de declaración.También lo he reformateado un poco para que sea más legible).
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
En este ejemplo, agregué un punto y coma al final de la vista. El Diseñador de consultas no incluyó esto, pero es una buena práctica incluirlo.
El punto y coma es parte del estándar ANSI SQL-92. Es un carácter de terminación de declaración.
Además, Microsoft ha anunciado que las declaraciones Transact-SQL que no terminan en punto y coma están obsoletas en SQL Server 2016, y no serán compatibles en una versión futura (SQL Server históricamente ha usado el
GO
palabra clave como un terminador de declaración en lugar del punto y coma). -
Ejecutar la Vista
Ahora ejecute la vista como ejecutaría cualquier otra consulta.
Haga clic en Ejecutar en la barra de herramientas.
Ahora puede navegar a la vista en el Explorador de objetos. Expanda y verá las columnas y sus tipos de datos y propiedades, como si fuera una tabla.
-
Consultar la Vista
Ahora que se ha creado la vista, puede consultar la vista ejecutando
SELECT
declaración en contra.Entonces puede consultar nuestra vista recién creada usando
SELECT * FROM RecentAlbums;
. -
Filtrar la vista
Una de las ventajas de las vistas es que puede aplicarles sus propios criterios de filtrado, filtrando aún más los resultados.
Por ejemplo, podría agregar
WHERE Genre = 'Pop'
, para que la vista solo devuelva pop álbumes de los últimos 10 años.
Modificar una vista
Puede modificar su vista usando ALTER VIEW
declaración en lugar de CREATE VIEW
declaración.
-
Diseña la vista alterada
Aquí modificaremos nuestra vista para devolver álbumes de los últimos 20 años en lugar de solo 10.
Es una colección bastante antigua, por lo que cualquier álbum lanzado en los últimos 20 años se clasifica como "reciente" :)
También devolveremos otra columna:Artists.ActiveFrom
Código de muestra
Aquí está el código que usamos para el ejemplo:
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
Consultar la Vista
Ahora, consultar la vista devolverá 20 años de álbumes. También mostrará la fecha desde la que el artista estuvo activo.