En SQL Server, puede usar Transact-SQL VIEWS vista de esquema de información del sistema para devolver información sobre una o más vistas en la base de datos actual. Devuelve una fila para las vistas a las que puede acceder el usuario actual en la base de datos actual.
Para usar esta vista, especifique el nombre completo de INFORMATION_SCHEMA.VIEWS .
Ejemplo 1:devolver información sobre una vista específica
Este es un ejemplo de devolución de información sobre todas las vistas a las que el usuario actual tiene acceso en la base de datos actual.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Resultado:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | | Music | dbo | JazzAlbums | NONE | NO | | Music | dbo | BluesAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Omití intencionalmente una columna en este ejemplo. Omití el VIEW_DEFINITION columna. Lo dejé porque estropea la salida cuando uso mi herramienta de línea de comandos. Puede ver un ejemplo que incluye esta columna a continuación.
Tenga en cuenta que la documentación de Microsoft advierte que no debe usar el INFORMATION_SCHEMA vistas para determinar el esquema de un objeto. La única forma confiable de encontrar el esquema de un objeto es consultar el sys.objects vista de catálogo.
Ejemplo 2:devolver información sobre una vista específica
Este es un ejemplo de devolución de información sobre una vista específica.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultado:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Aquí está de nuevo con VIEW_DEFINITION columna incluida:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultado:
+-----------------+----------------+--------------+-------------------+----------------+----------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE |
|-----------------+----------------+--------------+-------------------+----------------+----------------|
| Music | dbo | RockAlbums | CREATE VIEW RockAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Rock'; | NONE | NO |
+-----------------+----------------+--------------+-------------------+----------------+----------------+
Ejemplo 3:devolver solo la definición de vista
A pesar de la desventaja de que la definición de la vista estropea mi diseño, esta columna puede ser útil si solo está buscando la definición de la vista:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultado:
+-------------------+
| VIEW_DEFINITION |
|-------------------|
| CREATE VIEW RockAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Rock'; |
+-------------------+
Ejemplo 4:devolver las definiciones de vista de varias vistas
El VIEW_DEFINITION La columna puede ser muy útil si desea enumerar las definiciones de vista para varias vistas a la vez:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultado:
+-------------------+
| VIEW_DEFINITION |
|-------------------|
| CREATE VIEW RockAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Rock'; |
| CREATE VIEW JazzAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Jazz'; |
| CREATE VIEW BluesAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Blues'; |
+-------------------+
(3 rows affected)
Ejemplo 5:devolución de definiciones de vista grande
El VIEW_DEFINITION la columna tiene una longitud máxima de nvarchar(4000) . Para ver definiciones más grandes que esta, puede usar OBJECT_DEFINITION() función (junto con OBJECT_ID() función) para devolver la definición completa.
El valor de retorno de OBJECT_DEFINITION() la función es nvarchar(max) , por lo que no tiene la limitación de caracteres de VIEW_DEFINITION columna (que, como se mencionó, es nvarchar(4000) ).
Ejemplo:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultado:
+--------------------+
| (No column name) |
|--------------------|
| CREATE VIEW RockAlbums
AS
SELECT AlbumName, ArtistName
FROM Albums
INNER JOIN Artists
ON Albums.ArtistId = Artists.ArtistId
INNER JOIN Genres
ON Albums.GenreId = Genres.GenreId
WHERE Genres.Genre = 'Rock'; |
+--------------------+
Obviamente, este ejemplo no muestra el beneficio de usar OBJECT_DEFINITION() función, porque la definición de vista es demasiado pequeña, pero si tiene una definición de vista extra grande, espero que este ejemplo ayude.