V SQL Server můžete dotazy jako pohledy. Zobrazení jsou přínosná z mnoha důvodů, včetně zabezpečení, použitelnosti a pohodlí.
Na serveru SQL Server zobrazení je virtuální tabulka, jejíž obsah je definován dotazem. Je to v podstatě předem napsaný dotaz, který je uložen v databázi.
Pohled se skládá z SELECT
a když spustíte dotaz proti pohledu, uvidíte jeho výsledky jako při otevírání tabulky. Pohledy se označují jako virtuální tabulky, protože mohou shromažďovat data z více tabulek i agregovaná data a prezentovat je, jako by šlo o jedinou tabulku.
Výhody zobrazení
Zobrazení může být užitečné, když existuje více uživatelů s různými úrovněmi přístupu, kteří všichni potřebují vidět části dat v databázi (ale ne nutně všechna data). Pohledy mohou provádět následující:
- Omezit přístup ke konkrétním řádkům v tabulce
- Omezit přístup ke konkrétním sloupcům v tabulce
- Spojte sloupce z více tabulek a prezentujte je, jako by byly součástí jedné tabulky
- Předložte souhrnné informace (jako jsou výsledky
COUNT()
funkce)
Jak vytvořit zobrazení
Pohled vytvoříte pomocí CREATE VIEW
za ním následuje SELECT
prohlášení.
CREATE VIEW ViewName AS SELECT ...
Nyní vytvoříme pohled z našeho předchozího dotazu.
-
Navrhněte zobrazení
Vezměte dotaz z našeho předchozího příkladu a předponu mu přidejte CREATE VIEW RecentAlbums AS .
Odstraňte také
ORDER BY
klauzuli, protože pohledy tuto klauzuli nepodporují (pokud neníTOP
,OFFSET
neboFOR XML
je také specifikováno).Také přidejte středník na konec příkazu jako ukončení příkazu (více o tom níže).
Ukázkový kód
Níže je kód z našeho příkladu s
ORDER BY
byla odstraněna klauzule a přidán středník jako terminátor příkazu.Také jsem ho trochu přeformátoval, aby byl čitelnější).
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
V tomto příkladu jsem přidal středník na konec pohledu. Návrhář dotazů to nezahrnul, ale je dobré to zahrnout.
Středník je součástí standardu ANSI SQL-92. Je to znak ukončení příkazu.
Společnost Microsoft také oznámila, že příkazy Transact-SQL bez středníků jsou v SQL Server 2016 zastaralé a v budoucí verzi nebudou podporovány (SQL Server historicky používal
GO
klíčové slovo jako ukončovací znak příkazu namísto středníku). -
Spustit zobrazení
Nyní spusťte zobrazení stejně, jako byste spustili jakýkoli jiný dotaz.
Klikněte na Provést na panelu nástrojů.
Nyní můžete přejít na zobrazení v Průzkumníku objektů. Rozbalte ji a uvidíte sloupce a jejich datové typy a vlastnosti – jako by to byla tabulka.
-
Dotaz na zobrazení
Nyní, když je pohled vytvořen, můžete se na pohled dotazovat spuštěním
SELECT
prohlášení proti.Takže se můžete dotazovat na náš nově vytvořený pohled pomocí
SELECT * FROM RecentAlbums;
. -
Filtrovat zobrazení
Jednou z dobrých věcí na zobrazeních je, že na ně můžete použít vlastní kritéria filtrování – další filtrování výsledků.
Můžete například přidat
WHERE Genre = 'Pop'
, takže zobrazení vrátí pouze pop alba za posledních 10 let.
Změnit zobrazení
Svůj pohled můžete upravit pomocí ALTER VIEW
místo příkazu CREATE VIEW
prohlášení.
-
Navrhněte změněné zobrazení
Zde upravíme náš pohled na návrat alb za posledních 20 let namísto pouhých 10.
Je to docela stará sbírka, takže každé album vydané za posledních 20 let je klasifikováno jako "nedávné" :)
Vrátíme také další sloupec:Artists.ActiveFrom
Ukázkový kód
Zde je kód, který používáme pro příklad:
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
Dotaz na zobrazení
Nyní dotazování pohledu vrátí alba za 20 let. Zobrazí se také datum, od kterého byl umělec aktivní.