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.