In SQL Server kunt u query's als views uitvoeren. Weergaven zijn om vele redenen nuttig, waaronder veiligheid, bruikbaarheid en gemak.
In SQL Server, een weergave is een virtuele tabel waarvan de inhoud wordt gedefinieerd door een query. Het is in feite een vooraf geschreven zoekopdracht die in de database wordt opgeslagen.
Een weergave bestaat uit een SELECT
statement, en wanneer u een query uitvoert op de view, ziet u de resultaten ervan zoals u zou doen bij het openen van een tabel. Weergaven worden virtuele tabellen genoemd omdat ze gegevens uit meerdere tabellen kunnen samenvoegen, evenals gegevens kunnen aggregeren, en deze kunnen presenteren alsof het een enkele tabel is.
Voordelen van weergaven
Een weergave kan handig zijn als er meerdere gebruikers zijn met verschillende toegangsniveaus, die allemaal delen van de gegevens in de database moeten zien (maar niet noodzakelijk alle gegevens). Weergaven kunnen het volgende doen:
- Beperk de toegang tot specifieke rijen in een tabel
- Beperk de toegang tot specifieke kolommen in een tabel
- Kolommen uit meerdere tabellen samenvoegen en ze presenteren alsof ze deel uitmaken van een enkele tabel
- Gezamenlijke informatie presenteren (zoals de resultaten van de
COUNT()
functie)
Een weergave maken
U maakt een weergave met behulp van de CREATE VIEW
statement, gevolgd door de SELECT
verklaring.
CREATE VIEW ViewName AS SELECT ...
We gaan nu een weergave maken op basis van onze vorige zoekopdracht.
-
Ontwerp de weergave
Neem de query uit ons vorige voorbeeld en voeg het voorvoegsel toe met CREATE VIEW RecentAlbums AS .
Verwijder ook de
ORDER BY
clausule, omdat views deze clausule niet ondersteunen (tenzijTOP
,OFFSET
ofFOR XML
wordt ook gespecificeerd).Voeg ook een puntkomma toe aan het einde van de verklaring, als een verklaring terminator (meer daarover hieronder).
Voorbeeldcode
Hieronder staat de code uit ons voorbeeld, met de
ORDER BY
clausule verwijderd, en een puntkomma toegevoegd als een verklaring terminator.Ik heb het ook een beetje opnieuw geformatteerd om het leesbaarder te maken).
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()));
In dit voorbeeld heb ik een puntkomma aan het einde van de weergave toegevoegd. De Query Designer heeft dit niet opgenomen, maar het is een goede gewoonte om het op te nemen.
De puntkomma maakt deel uit van de ANSI SQL-92-standaard. Het is een terminator-teken voor een statement.
Microsoft heeft ook aangekondigd dat Transact-SQL-instructies zonder puntkomma's zijn verouderd in SQL Server 2016 en niet worden ondersteund in een toekomstige versie (SQL Server heeft in het verleden de
GO
gebruikt zoekwoord als een verklaring terminator in plaats van de puntkomma). -
Voer de weergave uit
Voer nu de weergave uit zoals u elke andere zoekopdracht zou uitvoeren.
Klik op Uitvoeren op de werkbalk.
U kunt nu navigeren naar de weergave in de Objectverkenner. Vouw het uit en je ziet de kolommen en hun gegevenstypen en eigenschappen — alsof het een tabel is.
-
Bezoek de weergave
Nu de weergave is gemaakt, kunt u de weergave opvragen door een
SELECT
. uit te voeren verklaring ertegen.U kunt dus onze nieuw gemaakte weergave opvragen met
SELECT * FROM RecentAlbums;
. -
De weergave filteren
Een van de goede dingen van weergaven is dat je er je eigen filtercriteria op kunt toepassen — de resultaten verder filteren.
U kunt bijvoorbeeld
WHERE Genre = 'Pop'
. toevoegen , zodat de weergave alleen pop teruggeeft albums van de afgelopen 10 jaar.
Een weergave wijzigen
U kunt uw weergave wijzigen met behulp van de ALTER VIEW
statement in plaats van de CREATE VIEW
verklaring.
-
Ontwerp de gewijzigde weergave
Hier zullen we onze visie aanpassen om albums van de afgelopen 20 jaar terug te geven in plaats van slechts 10.
Het is een behoorlijk oude schoolcollectie, dus elk album dat in de afgelopen 20 jaar is uitgebracht, wordt geclassificeerd als "recent" :)
We retourneren ook een andere kolom:Artists.ActiveFrom
Voorbeeldcode
Dit is de code die we voor het voorbeeld gebruiken:
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()));
-
Bezoek de weergave
Als je nu naar de weergave opvraagt, krijg je 20 jaar aan albums terug. Het toont ook de datum waarop de artiest actief was.