Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskaj informacje o widoku za pomocą widoku schematu informacji WIDOKÓW w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL Gdzie Kolumna ='' zwracająca znaki Emoji 🎃 i 🍰

  2. Różnica dwóch dat w serwerze sql

  3. Dlaczego nie mogę wykonać funkcji agregującej na wyrażeniu zawierającym agregację, ale mogę to zrobić, tworząc wokół niego nową instrukcję select?

  4. Usuwanie wiodących zer z pola w instrukcji SQL

  5. Pobierz dzień tygodnia w SQL Server 2005/2008