In SQL Server puoi usare Transact-SQL VIEWS
vista dello schema delle informazioni di sistema per restituire informazioni su una o più viste nel database corrente. Restituisce una riga per le viste a cui l'utente corrente può accedere nel database corrente.
Per utilizzare questa vista, specifica il nome completo di INFORMATION_SCHEMA.VIEWS
.
Esempio 1 – Informazioni sulla restituzione di una vista specifica
Ecco un esempio di restituzione di informazioni su tutte le viste a cui l'utente corrente ha accesso nel database corrente.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Risultato:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Ho omesso intenzionalmente una colonna in questo esempio. Ho omesso il VIEW_DEFINITION
colonna. L'ho lasciato fuori perché incasina l'output quando si utilizza il mio strumento da riga di comando. Puoi vedere un esempio che include questa colonna di seguito.
Tieni presente che la documentazione Microsoft avverte di non utilizzare INFORMATION_SCHEMA
viste per determinare lo schema di un oggetto. L'unico modo affidabile per trovare lo schema di un oggetto è interrogare sys.objects
vista catalogo.
Esempio 2 – Informazioni sulla restituzione di una vista specifica
Ecco un esempio di restituzione di informazioni su una vista specifica.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Risultato:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Eccolo di nuovo con il VIEW_DEFINITION
colonna inclusa:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Risultato:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Esempio 3 – Restituisci solo la definizione della vista
Nonostante lo svantaggio della definizione della vista incasina il mio layout, questa colonna può tornare utile se stai solo cercando la definizione della vista:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Risultato:
+-------------------+ | 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'; | +-------------------+
Esempio 4 – Restituire le definizioni di visualizzazione di più visualizzazioni
Il VIEW_DEFINITION
la colonna può essere molto utile se vuoi elencare le definizioni delle viste per più viste contemporaneamente:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Risultato:
+-------------------+ | 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)
Esempio 5 – Restituzione di definizioni di visualizzazione ingrandita
Il VIEW_DEFINITION
la colonna ha una lunghezza massima di nvarchar(4000) . Per definizioni di viste più grandi di questa, puoi usare OBJECT_DEFINITION()
funzione (insieme a OBJECT_ID()
funzione) per restituire la definizione completa.
Il valore restituito di OBJECT_DEFINITION()
la funzione è nvarchar(max) , quindi non ha il limite di caratteri di VIEW_DEFINITION
colonna (che, come accennato, è nvarchar(4000) ).
Esempio:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Risultato:
+--------------------+ | (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'; | +--------------------+
Ovviamente, questo esempio non mostra il vantaggio dell'utilizzo di OBJECT_DEFINITION()
funzione, perché la definizione della vista è troppo piccola, ma se si dispone di una definizione della vista extra grande, si spera che questo esempio aiuti.