MSDE Altre istruzioni per l'uso (parte 6) - Creare/Eliminare Una Vista
a cura di Sabrina Cosolo (requisiti: Livello intemedio di conoscenza generale)

Creare una Vista via codice SQL
Nel comune uso dei database, due delle necessità principali dell'amministratore del database sono quella di poter dare agli utenti i dati di cui hanno bisogno nel modo più rapido e conciso e quella di dare agli utenti solo i dati di loro competenza.
L'esempio classico portato da tutti i manuali è quello degli impiegati: tutti all'interno dell'azienda devono avere accesso all'elenco degli impiegati, alle loro qualifiche, ai numeri di telefono interni, ma solo l'amministrazione deve avere accesso ai loro dati personali, ai dati relativi alle loro paghe e ad altri dati sensibili.
Per predisporre i dati giusti al momento giusto per ciascuno degli utenti, si possono utilizzare le viste che altro non sono che query SQL memorizzate sul server.

Di seguito il codice SQL per la creazione di una Vista sul nostro database esempio.

  CREATE VIEW dbo.ViBrani 
    AS 
      SELECT dbo.tbBrani.numBrano AS [N.]
        , dbo.tbBrani.TitoloBrano AS [Titolo Brano]
        , dbo.tbCd.Titolo AS [Titolo Album]
        , dbo.tbInterpreti.Nome AS Interprete
        , dbo.tbCatMusicali.Nome AS [Cat.Musicale]
        , dbo.tbCate.Nome AS Tipo
        , dbo.tbCaseDisc.Nome AS [Casa Discografica] 
      FROM dbo.tbBrani 
      INNER JOIN dbo.tbCd 
        ON dbo.tbBrani.idCd 
        = dbo.tbCd.idcd 
      INNER JOIN dbo.tbInterpreti 
        ON dbo.tbBrani.idInterprete 
        = dbo.tbInterpreti.idInterprete 
      INNER JOIN dbo.tbCate 
        ON dbo.tbCd.idCate 
        = dbo.tbCate.idCate 
      INNER JOIN dbo.tbCatMusicali 
        ON dbo.tbBrani.idCatMuscale 
        = dbo.tbCatMusicali.idCatMusicale 
      INNER JOIN dbo.tbCaseDisc 
        ON dbo.tbCd.idCasadisc 
        = dbo.tbCaseDisc.idCasaDisc

Come potete notare, la sola cosa che differenzia questo script da una query è la dicitura

  CREATE VIEW [owner].NomeVista AS

Ricordo che NomeVista è un nome che deve essere univoco all'interno del database e deve rispondere alle regole di nomenclatura già citate in precedenza.

Una volta creata, la vista può essere interrogata con una Select esattamente come fosse una tabella del database.
Ricordo anche che è opportuno che, come tutti gli oggetti database, sia creata utilizzando un utente con diritti di amministrazione sul database, come SA o gli appartenenti al gruppo Builtin/Administrators.

Eliminare una Vista via codice SQL
Come sempre eliminare è semplice: ecco il codice per eliminare la vista che abbiamo creato:

  DROP VIEW ViBrani

La sintassi di base del comando è:

  DROP VIEW [owner].[NomeVista]

Dove owner e NomeVista corrispondono alle definizioni date in precedenza. Al contrario dei vincoli non c'è alcun controllo da parte dell'RDBMS sull'eliminazione della vista, perciò, se quest'ultima fosse usata all'interno di altre viste (normale quando si lavora su Database complessi) oppure all'interno di Stored Procedure, questo non verrebbe controllato e quindi potrebbe dar luogo a risultati indesiderati se non si presta attenzione.

Anche per questi comandi SQL si può utilizzare OSQL.EXE (vedi, anche per i parametri).

La sintassi per chiamare un comando SQL usando OSQL è la seguente:

  osql -S Localhost -U SA -P as -i vistesql.sql

un possibile file di input da utilizzare per realizzare uno degli esempi vistesql.sql è un file di testo contenente il comando da eseguire, che è leggermente diverso da quello sopra descritto, riporto la sintassi per la creazione della nostra vista:

  USE MusicBox
  GO
 
  CREATE VIEW dbo.ViBrani 
    AS 
      SELECT dbo.tbBrani.numBrano AS [N.]
        , dbo.tbBrani.TitoloBrano AS [Titolo Brano]
        , dbo.tbCd.Titolo AS [Titolo Album]
        , dbo.tbInterpreti.Nome AS Interprete
        , dbo.tbCatMusicali.Nome AS [Cat.Musicale]
        , dbo.tbCate.Nome AS Tipo
        , dbo.tbCaseDisc.Nome AS [Casa Discografica] 
      FROM dbo.tbBrani 
      INNER JOIN dbo.tbCd 
        ON dbo.tbBrani.idCd 
        = dbo.tbCd.idcd 
      INNER JOIN dbo.tbInterpreti 
        ON dbo.tbBrani.idInterprete 
        = dbo.tbInterpreti.idInterprete 
      INNER JOIN dbo.tbCate 
        ON dbo.tbCd.idCate 
        = dbo.tbCate.idCate 
      INNER JOIN dbo.tbCatMusicali 
        ON dbo.tbBrani.idCatMuscale 
        = dbo.tbCatMusicali.idCatMusicale 
      INNER JOIN dbo.tbCaseDisc 
        ON dbo.tbCd.idCasadisc 
        = dbo.tbCaseDisc.idCasaDisc
  GO
 
  QUIT

Il comando USE MUSICBOX serve a dire al server che dobbiamo lavorare sul Database Musicbox (database di esempio creato nel precedente articolo), Il comando GO esegue i comandi richiesti, il comando QUIT esce da OSQL.EXE che altrimenti si comporta come un interprete comandi e rimane attivo all'interno della finestra console.

La sintassi da usare con OSQL per trasportarvi tutti gli script da noi generati in questa pagina è la seguente:

  USE Musicbox
  GO 
 
  script da eseguire
 
  GO
 
  QUIT
<<< Creare/Eliminare Vincoli e Relazioni