sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2016:Skapa en vy

I SQL Server kan du göra frågor som vyer. Visningar är fördelaktiga av många skäl, inklusive säkerhet, användbarhet och bekvämlighet.

I SQL Server, en vy är en virtuell tabell vars innehåll definieras av en fråga. Det är i princip en förskriven fråga som lagras i databasen.

En vy består av en SELECT uttalande, och när du kör en fråga mot vyn ser du resultatet av den som när du öppnar en tabell. Vyer kallas virtuella tabeller eftersom de kan dra ihop data från flera tabeller, såväl som aggregerad data, och presentera det som om det vore en enda tabell.

Fördelar med vyer

En vy kan vara användbar när det finns flera användare med olika åtkomstnivåer, som alla behöver se delar av data i databasen (men inte nödvändigtvis all data). Vyer kan göra följande:

  • Begränsa åtkomsten till specifika rader i en tabell
  • Begränsa åtkomsten till specifika kolumner i en tabell
  • Sammanfoga kolumner från flera tabeller och presentera dem som om de är en del av en enda tabell
  • Presentera samlad information (som resultaten av COUNT() funktion)

Hur man skapar en vy

Du skapar en vy genom att använda CREATE VIEW sats, följt av SELECT uttalande.

CREATE VIEW ViewName 
AS
SELECT ...

Vi kommer nu att skapa en vy från vår tidigare fråga.

  1. Designa vyn

    Ta frågan från vårt tidigare exempel och prefix den med CREATE VIEW RecentAlbums AS .

    Ta också bort ORDER BY sats, eftersom vyer inte stöder denna sats (såvida inte TOP , OFFSET eller FOR XML anges också).

    Lägg också till ett semikolon i slutet av satsen, som en terminator (mer om det nedan).

    Exempelkod

    Nedan är koden från vårt exempel, med ORDER BY sats borttagen, och ett semikolon läggs till som en satsterminator.

    Jag har också formaterat om den lite för att göra den mer 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 det här exemplet lade jag till ett semikolon i slutet av vyn. Frågedesignern inkluderade inte detta, men det är bra att inkludera det.

    Semikolonet är en del av ANSI SQL-92-standarden. Det är ett tecken för uttalandeavslutning.

    Microsoft har också meddelat att Transact-SQL-satser som inte slutar med semikolon är utfasade i SQL Server 2016, och de kommer inte att stödjas i en framtida version (SQL Server har historiskt använt GO nyckelord som en satsterminator istället för semikolon).

  2. Kör vyn

    Kör nu vyn precis som du skulle köra vilken annan fråga som helst.

    Klicka på Kör i verktygsfältet.

    Du kan nu navigera till vyn i Objektutforskaren. Expandera den så ser du kolumnerna och deras datatyper och egenskaper – som om det vore en tabell.

  3. Fråga vyn

    Nu när vyn har skapats kan du fråga vyn genom att köra en SELECT uttalande mot det.

    Så du kan fråga vår nyskapade vy genom att använda SELECT * FROM RecentAlbums; .

  4. Filtrera vyn

    En av de bra sakerna med vyer är att du kan tillämpa dina egna filtreringskriterier mot dem – filtrera resultaten ytterligare.

    Till exempel kan du lägga till WHERE Genre = 'Pop' , så att vyn bara returnerar pop album från de senaste 10 åren.

Ändra en vy

Du kan ändra din vy genom att använda ALTER VIEW sats istället för CREATE VIEW uttalande.

  1. Designa den ändrade vyn

    Här kommer vi att ändra vår syn på att returnera album under de senaste 20 åren istället för bara 10.

    Det är en ganska gammal samling, så alla album som släppts under de senaste 20 åren klassificeras som "senaste" :)

    Vi kommer också att returnera en annan kolumn:Artists.ActiveFrom

    Exempelkod

    Här är koden vi använder för exemplet:

    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()));
  2. Fråga vyn

    Om du nu frågar efter vyn kommer du att returnera 20 års album. Det kommer också att visa det datum artisten var aktiv från.


  1. Hur man säkerhetskopierar RAC VM:s

  2. Hur kontrollerar jag om radioknappen är markerad eller vald i jQuery?

  3. Filtrerade index och INKLUDERADE kolumner

  4. Hur konverterar man SQL Query-resultat till PANDAS Data Structure?