No SQL Server, você pode usar o Transact-SQL
VIEWS
visualização do esquema de informações do sistema para retornar informações sobre uma ou mais visualizações no banco de dados atual. Ele retorna uma linha para visualizações que podem ser acessadas pelo usuário atual no banco de dados atual. Para usar essa visualização, especifique o nome totalmente qualificado de
INFORMATION_SCHEMA.VIEWS
. Exemplo 1 – Retornar informações sobre uma visualização específica
Aqui está um exemplo de retorno de informações sobre todas as visualizações às quais o usuário atual tem acesso no banco de dados atual.
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 | +-----------------+----------------+--------------+----------------+----------------+
Eu omiti intencionalmente uma coluna neste exemplo. Eu omiti o
VIEW_DEFINITION
coluna. Deixei de fora porque atrapalha a saída ao usar minha ferramenta de linha de comando. Você pode ver um exemplo que inclui essa coluna abaixo. Observe que a documentação da Microsoft avisa que você não deve usar o
INFORMATION_SCHEMA
views para determinar o esquema de um objeto. A única maneira confiável de encontrar o esquema de um objeto é consultar o sys.objects
visualização do catálogo. Exemplo 2 – Retornar informações sobre uma visualização específica
Aqui está um exemplo de retorno de informações sobre uma visualização 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 | +-----------------+----------------+--------------+----------------+----------------+
Aqui está novamente com o
VIEW_DEFINITION
coluna incluída: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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Exemplo 3 – Retornar apenas a definição de visualização
Apesar da desvantagem da definição de exibição atrapalhar meu layout, esta coluna pode ser útil se você estiver apenas procurando a definição de exibição:
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'; | +-------------------+
Exemplo 4 – Retornar as definições de exibição de várias exibições
O
VIEW_DEFINITION
column pode ser mais útil se quiser listar as definições de exibição para várias exibições de uma só 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)
Exemplo 5 – Retornando definições de exibição grande
O
VIEW_DEFINITION
coluna tem um comprimento máximo de nvarchar(4000) . Para definições de visualização maiores que isso, você pode usar o OBJECT_DEFINITION()
função (junto com o OBJECT_ID()
função) para retornar a definição completa. O valor de retorno de
OBJECT_DEFINITION()
função é nvarchar(max) , portanto, não tem a limitação de caracteres do VIEW_DEFINITION
coluna (que, como mencionado, é nvarchar(4000) ). Exemplo:
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 exemplo não mostra o benefício de usar o
OBJECT_DEFINITION()
função, porque a definição de exibição é muito pequena, mas se você tiver uma definição de exibição extra grande, espero que este exemplo ajude.