В 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() функция, защото дефиницията на изглед е твърде малка, но ако имате много голяма дефиниция на изглед, да се надяваме, че този пример помогне.