I SQL Server kan du använda Transact-SQL VIEWS
systeminformationsschemavy för att returnera information om en eller flera vyer i den aktuella databasen. Den returnerar en rad för vyer som kan nås av den aktuella användaren i den aktuella databasen.
För att använda denna vy, ange det fullständiga namnet INFORMATION_SCHEMA.VIEWS
.
Exempel 1 – Returnera information om en specifik vy
Här är ett exempel på att returnera information om alla vyer som den aktuella användaren har åtkomst till i den aktuella databasen.
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 | +-----------------+----------------+--------------+----------------+----------------+
Jag har avsiktligt utelämnat en kolumn i det här exemplet. Jag har utelämnat VIEW_DEFINITION
kolumn. Jag utelämnade det eftersom det förstör utdata när jag använder mitt kommandoradsverktyg. Du kan se ett exempel som inkluderar denna kolumn nedan.
Observera att Microsofts dokumentation varnar för att du inte ska använda INFORMATION_SCHEMA
vyer för att bestämma schemat för ett objekt. Det enda tillförlitliga sättet att hitta schemat för ett objekt är att fråga sys.objects
katalogvy.
Exempel 2 – Returnera information om en specifik vy
Här är ett exempel på att returnera information om en specifik vy.
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 | +-----------------+----------------+--------------+----------------+----------------+
Här är den igen med VIEW_DEFINITION
kolumn ingår:
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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Exempel 3 – Returnera bara vydefinitionen
Trots att nackdelen med att vydefinitionen förstör min layout, kan den här kolumnen vara praktisk om du bara letar efter vydefinitionen:
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'; | +-------------------+
Exempel 4 – Returnera vydefinitionerna för flera vyer
VIEW_DEFINITION
kolumnen kan vara extra praktisk om du vill lista vydefinitionerna för flera vyer samtidigt:
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)
Exempel 5 – Returnerar definitioner med stor vy
VIEW_DEFINITION
kolumnen har en maximal längd på nvarchar(4000) . För vydefinitioner större än detta kan du använda OBJECT_DEFINITION()
funktion (tillsammans med OBJECT_ID()
funktion) för att returnera den fullständiga definitionen.
Returvärdet för OBJECT_DEFINITION()
funktionen är nvarchar(max) , så den har inte teckenbegränsningen för VIEW_DEFINITION
kolumn (som som nämnts är nvarchar(4000) ).
Exempel:
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'; | +--------------------+
Uppenbarligen visar det här exemplet inte fördelen med att använda OBJECT_DEFINITION()
funktion, eftersom vydefinitionen är för liten, men om du har en extra stor vydefinition hjälper förhoppningsvis detta exempel.