Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете информация за изглед с изгледа на информационна схема VIEWS в SQL Server

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете таблица с помощта на заявка за избор в SQL Server?

  2. Как работи EXCEPT в SQL Server

  3. Как да генерирам диапазон от числа между две числа?

  4. Събития на изчакване на SQL сървър -1

  5. Функция SUM() в SQL Server