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.