In SQL Server kunt u de Transact-SQL VIEWS
systeeminformatieschemaweergave om informatie over een of meer weergaven in de huidige database te retourneren. Het retourneert één rij voor weergaven die toegankelijk zijn voor de huidige gebruiker in de huidige database.
Om deze weergave te gebruiken, specificeert u de volledig gekwalificeerde naam van INFORMATION_SCHEMA.VIEWS
.
Voorbeeld 1 – Informatie over een specifieke weergave retourneren
Hier is een voorbeeld van het retourneren van informatie over alle weergaven waartoe de huidige gebruiker toegang heeft in de huidige database.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Resultaat:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
In dit voorbeeld heb ik bewust een kolom weggelaten. Ik heb de VIEW_DEFINITION
. weggelaten kolom. Ik heb het weggelaten omdat het de uitvoer verknoeit bij het gebruik van mijn opdrachtregelprogramma. Hieronder ziet u een voorbeeld waarin deze kolom is opgenomen.
Merk op dat de Microsoft-documentatie waarschuwt dat u de INFORMATION_SCHEMA
. niet moet gebruiken weergaven om het schema van een object te bepalen. De enige betrouwbare manier om het schema van een object te vinden, is door de sys.objects
. op te vragen catalogusweergave.
Voorbeeld 2 – Informatie over een specifieke weergave retourneren
Hier is een voorbeeld van het retourneren van informatie over een specifieke weergave.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultaat:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Hier is het weer met de VIEW_DEFINITION
kolom inbegrepen:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultaat:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Voorbeeld 3 – Geef alleen de weergavedefinitie terug
Ondanks het nadeel van de weergavedefinitie die mijn lay-out in de war brengt, kan deze kolom van pas komen als je alleen op zoek bent naar de weergavedefinitie:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultaat:
+-------------------+ | 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'; | +-------------------+
Voorbeeld 4 – Geef de weergavedefinities van meerdere weergaven terug
De VIEW_DEFINITION
kolom kan extra handig zijn als u de weergavedefinities voor meerdere weergaven tegelijk wilt weergeven:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultaat:
+-------------------+ | 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)
Voorbeeld 5 – Grote weergavedefinities retourneren
De VIEW_DEFINITION
kolom heeft een maximale lengte van nvarchar(4000) . Voor grotere weergavedefinities kunt u de OBJECT_DEFINITION()
gebruiken functie (samen met de OBJECT_ID()
functie) om de volledige definitie terug te geven.
De geretourneerde waarde van OBJECT_DEFINITION()
functie is nvarchar(max) , dus het heeft niet de tekenbeperking van de VIEW_DEFINITION
kolom (die, zoals vermeld, nvarchar(4000) is ).
Voorbeeld:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultaat:
+--------------------+ | (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'; | +--------------------+
Het is duidelijk dat dit voorbeeld niet het voordeel laat zien van het gebruik van de OBJECT_DEFINITION()
functie, omdat de weergavedefinitie te klein is, maar als je een extra grote weergavedefinitie hebt, helpt dit voorbeeld hopelijk.