Progettazione e implementazione di viste

Prima di creare una vista è consigliabile prendere in considerazione le linee guida seguenti:

  • È possibile creare le viste soltanto nel database corrente. Le tabelle e le viste a cui fa riferimento la nuova vista tuttavia possono esistere in altri database o persino in altri server se la vista viene definita utilizzando le query distribuite.

  • I nomi delle viste devono essere conformi alle regole per gli identificatori e devono essere univoci per ogni schema. Non è inoltre possibile specificare un nome uguale a quello di una tabella contenuta in tale schema.

  • È possibile creare viste su altre viste. Microsoft SQL Server consente la nidificazione delle viste. È supportato un massimo di 32 livelli di nidificazione. Il limite effettivo tuttavia può essere inferiore, in base alla complessità della vista e alla memoria disponibile.

  • Non è possibile associare regole o definizioni DEFAULT alle viste.

  • Non è possibile associare alle viste trigger AFTER, ma solo trigger INSTEAD OF.

  • La query che definisce la vista non può includere le clausole COMPUTE o ORDER BY oppure la parola chiave INTO.

  • La query che definisce la vista non può includere la clausola ORDER BY, a meno che nell'elenco di selezione dell'istruzione SELECT non sia presente anche una clausola TOP.

  • La query che definisce la vista non può contenere una clausola OPTION che specifichi un hint per query.

  • La query che definisce la vista non può contenere la clausola TABLESAMPLE.

  • Non è possibile definire definizioni di indici full-text nelle viste.

  • Non è possibile creare viste temporanee e non è possibile creare viste su tabelle temporanee.

  • Le viste, le tabelle o le funzioni che partecipano a una vista creata con la clausola SCHEMABINDING non possono essere eliminate, a meno che tale vista non venga eliminata o modificata in modo che non sia più associata a uno schema. Le istruzioni ALTER TABLE eseguite su tabelle che partecipano a viste con associazione di schema inoltre hanno esito negativo se modificano la definizione della vista.

  • Se la vista non viene creata con la clausola SCHEMABINDING, è necessario eseguire sp_refreshview quando vengono apportate modifiche agli oggetti sottostanti alla vista che ne influenzano la definizione. In caso contrario, le query sulla vista possono generare risultati imprevisti.

  • Non è possibile eseguire query full-text su una vista, anche se una definizione di vista può includere una query full-text se la query fa riferimento a una tabella configurata per l'indicizzazione full-text.

  • È necessario specificare il nome di ogni colonna della vista se:

    • Alcune colonne della vista derivano da un'espressione aritmetica, da una funzione predefinita o da una costante.

    • A due o più colonne nella vista verrebbe assegnato lo stesso nome (in genere perché la definizione di vista include un join e le colonne di due o più tabelle diverse hanno lo stesso nome).

    • Si desidera assegnare a ogni colonna della vista un nome diverso da quello della colonna da cui deriva. È inoltre possibile rinominare le colonne della vista. Una colonna di vista eredita il tipo di dati della colonna da cui deriva, indipendentemente dal fatto che venga rinominata o meno.

      Nota

      Questa regola non viene applicata quando una vista si basa su una query che include un outer join perché le colonne che non supportano valori Null potrebbero, a seguito di una modifica di impostazioni, supportare tali valori.

      In tutti gli altri casi non è necessario specificare i nomi di colonna in fase di creazione della vista. SQL Server assegna alle colonne della vista gli stessi nomi e tipi di dati delle colonne alle quali si riferisce la query che definisce la vista. L'elenco di selezione può essere un elenco completo o parziale dei nomi di colonna delle tabelle di base.

Per creare una vista, è necessario che il proprietario del database conceda l'autorizzazione per eseguire questa operazione e che, se la vista viene creata con la clausola SCHEMABINDING, conceda le autorizzazioni necessarie per le tabelle o viste a cui si fa riferimento nella definizione della vista.

Per impostazione predefinita, quando le righe vengono aggiunte o aggiornate tramite una vista, vengono escluse dall'ambito della vista quando non rientrano più nei criteri della query che definisce la vista. Ad esempio, è possibile creare una query definendo una vista che recuperi tutte le righe di una tabella in cui la retribuzione dei dipendenti è inferiore a 30.000 Euro. Se la retribuzione di alcuni dipendenti viene aumentata a 32.000 Euro e si esegue la query sulla vista, tali dipendenti non verranno più visualizzati perché la retribuzione non è conforme ai criteri impostati dalla vista. La clausola WITH CHECK OPTION tuttavia forza la conformità di tutte le istruzioni di modifica dei dati eseguite sulla vista ai criteri impostati nell'istruzione SELECT che definisce la vista. Se si utilizza questa clausola, non è possibile modificare le righe in modo che scompaiano dalla vista. Le eventuali modifiche di questo tipo verranno annullate e verrà generato un errore.

Per creare una vista