I SQL Server kan du bruge Transact-SQL VIEWS
systeminformationsskemavisning for at returnere information om en eller flere visninger i den aktuelle database. Den returnerer én række for visninger, som den aktuelle bruger kan få adgang til i den aktuelle database.
For at bruge denne visning skal du angive det fuldt kvalificerede navn på INFORMATION_SCHEMA.VIEWS
.
Eksempel 1 – Returner oplysninger om en specifik visning
Her er et eksempel på returnering af oplysninger om alle visninger, som den aktuelle bruger har adgang til i den aktuelle database.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Resultat:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Jeg har med vilje udeladt en kolonne i dette eksempel. Jeg har udeladt VIEW_DEFINITION
kolonne. Jeg udelod det, fordi det ødelægger outputtet, når jeg bruger mit kommandolinjeværktøj. Du kan se et eksempel, der inkluderer denne kolonne nedenfor.
Bemærk, at Microsoft-dokumentationen advarer om, at du ikke bør bruge INFORMATION_SCHEMA
visninger for at bestemme skemaet for et objekt. Den eneste pålidelige måde at finde skemaet for et objekt på er at forespørge sys.objects
katalogvisning.
Eksempel 2 – Returner oplysninger om en specifik visning
Her er et eksempel på returnering af oplysninger om en bestemt visning.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultat:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Her er den igen med VIEW_DEFINITION
kolonne inkluderet:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultat:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Eksempel 3 – Returner kun visningsdefinitionen
På trods af at visningsdefinitionens ulemper ødelægger mit layout, kan denne kolonne være nyttig, hvis du bare leder efter visningsdefinitionen:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultat:
+-------------------+ | 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'; | +-------------------+
Eksempel 4 – Returner visningsdefinitionerne for flere visninger
VIEW_DEFINITION
kolonne kan være ekstra praktisk, hvis du ønsker at vise visningsdefinitionerne for flere visninger på én gang:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultat:
+-------------------+ | 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)
Eksempel 5 – Returnerer definitioner af store visninger
VIEW_DEFINITION
kolonne har en maksimal længde på nvarchar(4000) . For visningsdefinitioner, der er større end dette, kan du bruge OBJECT_DEFINITION()
funktion (sammen med OBJECT_ID()
funktion) for at returnere den fulde definition.
Returværdien for OBJECT_DEFINITION()
funktionen er nvarchar(max) , så den har ikke tegnbegrænsningen for VIEW_DEFINITION
kolonne (der som nævnt er nvarchar(4000) ).
Eksempel:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Resultat:
+--------------------+ | (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'; | +--------------------+
Dette eksempel viser naturligvis ikke fordelen ved at bruge OBJECT_DEFINITION()
funktion, fordi visningsdefinitionen er for lille, men hvis du har en ekstra stor visningsdefinition, hjælper dette eksempel forhåbentlig.