Na serveru SQL Server můžete použít VIEWS Transact-SQL zobrazení schématu systémových informací pro vrácení informací o jednom nebo více pohledech v aktuální databázi. Vrátí jeden řádek pro pohledy, ke kterým má aktuální uživatel v aktuální databázi přístup.
Chcete-li použít toto zobrazení, zadejte plně kvalifikovaný název INFORMATION_SCHEMA.VIEWS .
Příklad 1 – Vrácení informací o konkrétním zobrazení
Zde je příklad vrácení informací o všech pohledech, ke kterým má aktuální uživatel přístup v aktuální databázi.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
Výsledek:
+-----------------+----------------+--------------+----------------+----------------+ | 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 | +-----------------+----------------+--------------+----------------+----------------+
Záměrně jsem v tomto příkladu vynechal sloupec. Vynechal jsem VIEW_DEFINITION sloupec. Vynechal jsem to, protože to kazí výstup při použití mého nástroje příkazového řádku. Níže můžete vidět příklad, který obsahuje tento sloupec.
Všimněte si, že dokumentace společnosti Microsoft varuje, že byste neměli používat INFORMATION_SCHEMA pohledy k určení schématu objektu. Jediný spolehlivý způsob, jak najít schéma objektu, je dotaz na sys.objects zobrazení katalogu.
Příklad 2 – Vrácení informací o konkrétním zobrazení
Zde je příklad vrácení informací o konkrétním výběru dat.
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, CHECK_OPTION, IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Výsledek:
+-----------------+----------------+--------------+----------------+----------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | CHECK_OPTION | IS_UPDATABLE | |-----------------+----------------+--------------+----------------+----------------| | Music | dbo | RockAlbums | NONE | NO | +-----------------+----------------+--------------+----------------+----------------+
Tady je to znovu s VIEW_DEFINITION zahrnutý sloupec:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Výsledek:
+-----------------+----------------+--------------+-------------------+----------------+----------------+
| 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 |
+-----------------+----------------+--------------+-------------------+----------------+----------------+
Příklad 3 – Vraťte pouze definici pohledu
Navzdory nevýhodám definice pohledu, která mi kazí rozvržení, se tento sloupec může hodit, pokud právě hledáte definici pohledu:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Výsledek:
+-------------------+
| 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'; |
+-------------------+
Příklad 4 – Vrácení definic zobrazení více zobrazení
VIEW_DEFINITION sloupec může být velmi užitečný, pokud chcete vypsat definice zobrazení pro více zobrazení najednou:
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Výsledek:
+-------------------+
| 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)
Příklad 5 – Vrácení definic velkého zobrazení
VIEW_DEFINITION sloupec má maximální délku nvarchar(4000) . Pro větší definice zobrazení můžete použít OBJECT_DEFINITION() funkce (spolu s OBJECT_ID() funkce) vrátíte úplnou definici.
Vrácená hodnota OBJECT_DEFINITION() funkce je nvarchar(max) , takže nemá omezení počtu znaků podle VIEW_DEFINITION sloupec (jak již bylo zmíněno, je nvarchar(4000) ).
Příklad:
SELECT OBJECT_DEFINITION(OBJECT_ID(TABLE_NAME)) FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'RockAlbums';
Výsledek:
+--------------------+
| (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'; |
+--------------------+
Je zřejmé, že tento příklad neukazuje výhodu použití OBJECT_DEFINITION() protože definice pohledu je příliš malá, ale pokud máte extra velkou definici pohledu, doufejme, že tento příklad pomůže.