Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2016:creare una vista

In SQL Server è possibile eseguire query come viste. Le visualizzazioni sono vantaggiose per molti motivi, tra cui sicurezza, usabilità e praticità.

In SQL Server, una vista è una tabella virtuale il cui contenuto è definito da una query. È fondamentalmente una query pre-scritta che viene archiviata nel database.

Una vista consiste in un SELECT istruzione e quando esegui una query sulla vista, ne vedi i risultati come faresti quando apri una tabella. Le viste sono denominate tabelle virtuali perché possono riunire i dati di più tabelle, nonché aggregare i dati e presentarli come se fosse un'unica tabella.

Vantaggi delle viste

Una vista può essere utile quando sono presenti più utenti con diversi livelli di accesso, che devono tutti visualizzare parti dei dati nel database (ma non necessariamente tutti i dati). Le visualizzazioni possono eseguire le seguenti operazioni:

  • Limita l'accesso a righe specifiche in una tabella
  • Limita l'accesso a colonne specifiche in una tabella
  • Unisci colonne di più tabelle e presentale come se facessero parte di un'unica tabella
  • Presenta informazioni aggregate (come i risultati di COUNT() funzione)

Come creare una vista

Puoi creare una vista utilizzando CREATE VIEW istruzione, seguita da SELECT dichiarazione.

CREATE VIEW ViewName 
AS
SELECT ...

Ora creeremo una vista dalla nostra query precedente.

  1. Progetta la vista

    Prendi la query dal nostro esempio precedente e anteponila con CREATE VIEW RecentAlbums AS .

    Rimuovi anche il ORDER BY clausola, perché le viste non supportano questa clausola (a meno che TOP , OFFSET o FOR XML è anche specificato).

    Aggiungi anche un punto e virgola alla fine dell'istruzione, come terminatore di istruzione (ne parleremo più avanti).

    Codice campione

    Di seguito è riportato il codice del nostro esempio, con ORDER BY clausola rimossa e punto e virgola aggiunto come terminatore di istruzione.

    L'ho anche riformattato un po' per renderlo più leggibile).

    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 questo esempio ho aggiunto un punto e virgola alla fine della vista. Query Designer non lo ha incluso, ma è buona norma includerlo.

    Il punto e virgola fa parte dello standard ANSI SQL-92. È un carattere terminatore di istruzione.

    Inoltre, Microsoft ha annunciato che le istruzioni Transact-SQL senza punto e virgola sono deprecate in SQL Server 2016 e non saranno supportate in una versione futura (SQL Server ha storicamente utilizzato GO parola chiave come terminatore di un'istruzione invece del punto e virgola).

  2. Esegui la vista

    Ora esegui la vista come eseguiresti qualsiasi altra query.

    Fai clic su Esegui sulla barra degli strumenti.

    È ora possibile passare alla vista in Esplora oggetti. Espandilo e vedrai le colonne e i relativi tipi di dati e proprietà, come se fosse una tabella.

  3. Interroga la vista

    Ora che la vista è stata creata, puoi interrogare la vista eseguendo un SELECT dichiarazione contro di essa.

    Quindi puoi interrogare la nostra vista appena creata usando SELECT * FROM RecentAlbums; .

  4. Filtra la vista

    Uno degli aspetti positivi delle visualizzazioni è che puoi applicare i tuoi criteri di filtraggio su di esse, filtrando ulteriormente i risultati.

    Ad esempio, puoi aggiungere WHERE Genre = 'Pop' , in modo che la vista restituisca solo pop album degli ultimi 10 anni.

Modificare una vista

Puoi modificare la tua visualizzazione utilizzando ALTER VIEW istruzione invece di CREATE VIEW dichiarazione.

  1. Progetta la vista modificata

    Qui modificheremo la nostra visualizzazione per restituire gli album degli ultimi 20 anni anziché solo 10.

    È una raccolta piuttosto vecchia, quindi qualsiasi album pubblicato negli ultimi 20 anni è classificato come "recente" :)

    Restituiremo anche un'altra colonna:Artists.ActiveFrom

    Codice campione

    Ecco il codice che utilizziamo per l'esempio:

    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. Interroga la vista

    Ora, interrogare la vista restituirà 20 anni di album. Mostrerà anche la data da cui l'artista era attivo.