I SQL Server kan du forespørge som visninger. Visninger er gavnlige af mange årsager, herunder sikkerhed, brugervenlighed og bekvemmelighed.
I SQL Server, en visning er en virtuel tabel, hvis indhold er defineret af en forespørgsel. Det er dybest set en forudskrevet forespørgsel, der er gemt i databasen.
En visning består af en SELECT
sætning, og når du kører en forespørgsel mod visningen, ser du resultaterne af den, som du ville, når du åbner en tabel. Visninger omtales som virtuelle tabeller, fordi de kan samle data fra flere tabeller såvel som aggregerede data og præsentere det, som om det er en enkelt tabel.
Fordele ved visninger
En visning kan være nyttig, når der er flere brugere med forskellige adgangsniveauer, som alle har brug for at se dele af dataene i databasen (men ikke nødvendigvis alle dataene). Visninger kan gøre følgende:
- Begræns adgangen til bestemte rækker i en tabel
- Begræns adgangen til specifikke kolonner i en tabel
- Slå sammen kolonner fra flere tabeller og præsentere dem, som om de er en del af en enkelt tabel
- Vis aggregerede oplysninger (såsom resultaterne af
COUNT()
funktion)
Sådan opretter du en visning
Du opretter en visning ved at bruge CREATE VIEW
sætning efterfulgt af SELECT
erklæring.
CREATE VIEW ViewName AS SELECT ...
Vi vil nu oprette en visning fra vores tidligere forespørgsel.
-
Design visningen
Tag forespørgslen fra vores tidligere eksempel, og præfiks den med CREATE VIEW RecentAlbums AS .
Fjern også
ORDER BY
klausul, fordi visninger ikke understøtter denne klausul (medmindreTOP
,OFFSET
ellerFOR XML
er også angivet).Tilføj også et semikolon til slutningen af sætningen som en erklæringsafslutning (mere om det nedenfor).
Eksempelkode
Nedenfor er koden fra vores eksempel med
ORDER BY
klausul fjernet, og et semikolon tilføjet som en sætningsafslutning.Jeg har også omformateret den lidt for at gøre den mere læsbar).
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()));
I dette eksempel tilføjede jeg et semikolon til slutningen af visningen. Forespørgselsdesigneren inkluderede ikke dette, men det er god praksis at inkludere det.
Semikolon er en del af ANSI SQL-92 standarden. Det er et udsagnsterminatortegn.
Microsoft har også annonceret, at Transact-SQL-sætninger uden semikolon er forældet i SQL Server 2016, og de vil ikke blive understøttet i en fremtidig version (SQL Server har historisk brugt
GO
søgeord som en sætningsterminator i stedet for semikolon). -
Udfør visningen
Udfør nu visningen, ligesom du ville udføre enhver anden forespørgsel.
Klik på Udfør på værktøjslinjen.
Du kan nu navigere til visningen i Objekt Explorer. Udvid den, og du vil se kolonnerne og deres datatyper og egenskaber - som om det var en tabel.
-
Forespørg på visningen
Nu hvor visningen er blevet oprettet, kan du forespørge visningen ved at køre en
SELECT
udtalelse imod det.Så du kan forespørge på vores nyoprettede visning ved at bruge
SELECT * FROM RecentAlbums;
. -
Filtrer visningen
En af de gode ting ved visninger er, at du kan anvende dine egne filtreringskriterier mod dem - yderligere filtrering af resultaterne.
For eksempel kan du tilføje
WHERE Genre = 'Pop'
, så visningen kun returnerer pop album fra de sidste 10 år.
Rediger en visning
Du kan ændre din visning ved at bruge ALTER VIEW
sætning i stedet for CREATE VIEW
erklæring.
-
Design den ændrede visning
Her vil vi ændre vores syn for at returnere albums gennem de sidste 20 år i stedet for kun 10.
Det er en ret old school-samling, så ethvert album udgivet inden for de sidste 20 år er klassificeret som "nylige" :)
Vi returnerer også en anden kolonne:Artists.ActiveFrom
Eksempelkode
Her er koden, vi bruger til eksemplet:
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()));
-
Forespørg på visningen
Nu vil en forespørgsel om udsigten returnere 20 års albums. Det vil også vise den dato, kunstneren var aktiv fra.