W SQL Server możesz użyć języka Transact-SQL VIEWS
widok schematu informacji o systemie, aby zwrócić informacje o jednym lub więcej widokach w bieżącej bazie danych. Zwraca jeden wiersz dla widoków, do których bieżący użytkownik może uzyskać dostęp w bieżącej bazie danych.
Aby użyć tego widoku, określ w pełni kwalifikowaną nazwę INFORMATION_SCHEMA.VIEWS
.
Przykład 1 – Zwróć informacje o określonym widoku
Oto przykład zwracania informacji o wszystkich widokach, do których bieżący użytkownik ma dostęp w bieżącej bazie danych.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Wynik:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Celowo pominąłem kolumnę w tym przykładzie. Pominąłem VIEW_DEFINITION
kolumna. Pominąłem to, ponieważ psuje dane wyjściowe podczas korzystania z mojego narzędzia wiersza poleceń. Poniżej możesz zobaczyć przykład zawierający tę kolumnę.
Pamiętaj, że dokumentacja firmy Microsoft ostrzega, że nie powinieneś używać INFORMATION_SCHEMA
widoki w celu określenia schematu obiektu. Jedynym niezawodnym sposobem znalezienia schematu obiektu jest zapytanie sys.objects
widok katalogu.
Przykład 2 – Zwróć informacje o określonym widoku
Oto przykład zwracania informacji o określonym widoku.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Wynik:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Oto znowu z VIEW_DEFINITION
zawiera kolumnę:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Wynik:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Przykład 3 – Zwróć tylko definicję widoku
Pomimo wad definicji widoku, które psują mój układ, ta kolumna może się przydać, jeśli szukasz tylko definicji widoku:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Wynik:
+-------------------+ | 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'; | +-------------------+
Przykład 4 – Zwróć definicje wielu widoków
VIEW_DEFINITION
kolumna może być bardzo przydatna, jeśli chcesz wyświetlić definicje widoków dla wielu widoków jednocześnie:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Wynik:
+-------------------+ | 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)
Przykład 5 – Zwracanie definicji dużych widoków
VIEW_DEFINITION
kolumna ma maksymalną długość nvarchar(4000) . W przypadku definicji widoków większych niż ta, możesz użyć OBJECT_DEFINITION()
funkcja (wraz z OBJECT_ID()
funkcja), aby zwrócić pełną definicję.
Zwracana wartość OBJECT_DEFINITION()
funkcja to nvarchar(max) , więc nie ma ograniczenia znaków VIEW_DEFINITION
kolumna (która, jak wspomniano, to nvarchar(4000) ).
Przykład:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Wynik:
+--------------------+ | (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'; | +--------------------+
Oczywiście ten przykład nie pokazuje korzyści z użycia OBJECT_DEFINITION()
funkcji, ponieważ definicja widoku jest zbyt mała, ale jeśli masz bardzo dużą definicję widoku, mam nadzieję, że ten przykład pomoże.