В SQL Server можете да използвате Transact-SQL VIEWS
изглед на схема за системна информация, за да върне информация за един или повече изгледи в текущата база данни. Връща един ред за изгледи, които могат да бъдат достъпни от текущия потребител в текущата база данни.
За да използвате този изглед, посочете пълното име на INFORMATION_SCHEMA.VIEWS
.
Пример 1 – Връщане на информация за конкретен изглед
Ето пример за връщане на информация за всички изгледи, до които текущият потребител има достъп в текущата база данни.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Резултат:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Умишлено пропуснах колона в този пример. Пропуснах VIEW_DEFINITION
колона. Изпуснах го, защото обърква изхода, когато използвам моя инструмент за команден ред. Можете да видите пример, който включва тази колона по-долу.
Имайте предвид, че документацията на Microsoft предупреждава, че не трябва да използвате INFORMATION_SCHEMA
изгледи за определяне на схемата на обект. Единственият надежден начин да намерите схемата на обект е да потърсите sys.objects
изглед на каталог.
Пример 2 – Връщане на информация за конкретен изглед
Ето пример за връщане на информация за конкретен изглед.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Резултат:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Ето го отново с VIEW_DEFINITION
включена колона:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Резултат:
+-----------------+----------------+--------------+-------------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+-------------------+----------------+----------------+
Пример 3 – Върнете само дефиницията на изглед
Въпреки недостатъка на дефиницията на изгледа, който обърка моето оформление, тази колона може да ви бъде полезна, ако просто търсите дефиницията на изгледа:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Резултат:
+-------------------+ | 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'; | +-------------------+
Пример 4 – Връщане на дефинициите на изглед на множество изгледи
VIEW_DEFINITION
колоната може да бъде много удобна, ако искате да изброите дефинициите на изгледи за няколко изгледа наведнъж:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Резултат:
+-------------------+ | 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)
Пример 5 – Връщане на дефиниции на голям изглед
VIEW_DEFINITION
колоната има максимална дължина от nvarchar(4000) . За дефиниции на изглед, по-големи от това, можете да използвате OBJECT_DEFINITION()
функция (заедно с OBJECT_ID()
функция), за да върнете пълната дефиниция.
Връщаната стойност на OBJECT_DEFINITION()
функцията е nvarchar(max) , така че няма ограничението за знаци на VIEW_DEFINITION
колона (която, както споменахме, е nvarchar(4000) ).
Пример:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Резултат:
+--------------------+ | (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'; | +--------------------+
Очевидно този пример не показва ползата от използването на OBJECT_DEFINITION()
функция, защото дефиницията на изглед е твърде малка, но ако имате много голяма дефиниция на изглед, да се надяваме, че този пример помогне.