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.