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.