Ricerca…


CREA VISTA

CREATE VIEW view_EmployeeInfo
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        HireDate  
    FROM Employee
GO

Le righe delle viste possono essere selezionate in modo simile alle tabelle:

SELECT FirstName
FROM view_EmployeeInfo

Puoi anche creare una vista con una colonna calcolata. Possiamo modificare la vista sopra come segue aggiungendo una colonna calcolata:

CREATE VIEW view_EmployeeReport
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        Coalesce(FirstName,'') + ' ' + Coalesce(LastName,'') as FullName,
        HireDate  
    FROM Employee
GO

Questo punto di vista aggiunge una colonna aggiuntiva che verrà visualizzato quando si SELECT righe da esso. I valori in questa colonna aggiuntiva dipenderanno dai campi FirstName e LastName nella tabella Employee e aggiorneranno automaticamente dietro le quinte quando tali campi vengono aggiornati.

CREATE VIEW con la crittografia

CREATE VIEW view_EmployeeInfo
WITH ENCRYPTION
AS   
SELECT EmployeeID, FirstName, LastName, HireDate  
FROM Employee
GO

CREATE VIEW con INNER JOIN

CREATE VIEW view_PersonEmployee
AS  
    SELECT P.LastName,
        P.FirstName,
        E.JobTitle
    FROM Employee AS E
    INNER JOIN Person AS P  
        ON P.BusinessEntityID = E.BusinessEntityID
GO

Le viste possono utilizzare i join per selezionare i dati da numerose fonti come tabelle, funzioni di tabella o anche altre viste. Questo esempio utilizza le colonne FirstName e LastName dalla tabella Person e la colonna JobTitle dalla tabella Employee.

Ora questa vista può essere utilizzata per vedere tutte le righe corrispondenti per i Manager nel database:

SELECT *
FROM view_PersonEmployee
WHERE JobTitle LIKE '%Manager%'

CREA VISTA indicizzata

Per creare una vista con un indice, la vista deve essere creata utilizzando le parole chiave WITH SCHEMABINDING :

CREATE VIEW view_EmployeeInfo
WITH SCHEMABINDING
AS   
    SELECT EmployeeID,
        FirstName,
        LastName,
        HireDate  
    FROM [dbo].Employee
GO

Ora è possibile creare qualsiasi cluster o indici non cluster:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Ci sono alcune limitazioni alle viste indicizzate:

  • La definizione della vista può fare riferimento a una o più tabelle nello stesso database.

  • Una volta creato l'indice cluster univoco, è possibile creare ulteriori indici non cluster sulla vista.

  • È possibile aggiornare i dati nelle tabelle sottostanti, inclusi gli inserimenti, gli aggiornamenti, le eliminazioni e persino i troncati.

  • Non è possibile modificare le tabelle e le colonne sottostanti. La vista viene creata con l'opzione WITH SCHEMABINDING.

  • Non può contenere COUNT, MIN, MAX, TOP, join esterni o poche altre parole chiave o elementi.

Per ulteriori informazioni sulla creazione di viste indicizzate è possibile leggere questo articolo MSDN

VISTE raggruppate

Una VISTA raggruppata si basa su una query con una clausola GROUP BY. Poiché ciascuno dei gruppi può avere più di una riga nella base da cui è stato creato, questi sono necessariamente VISTE di sola lettura. Tali VISTE di solito hanno una o più funzioni aggregate e sono utilizzati a fini di reporting. Sono anche utili per aggirare i punti deboli in SQL. Considera una VISTA che mostra la più grande vendita in ogni stato. La query è semplice:

https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/

CREATE VIEW BigSales (state_code, sales_amt_total)
AS SELECT state_code, MAX(sales_amt)
     FROM Sales
    GROUP BY state_code;

VISIONI UNION-ED

Le VISUALIZZA basate su un'operazione UNION o UNION ALL sono di sola lettura perché non esiste un unico modo per mappare una modifica su una sola riga in una delle tabelle di base. L'operatore UNION rimuoverà le righe duplicate dai risultati. Sia gli operatori UNION che UNION ALL nascondono da quale tabella provengono le righe. Tali VISUALIZZAZIONI devono utilizzare a, poiché le colonne in UNION [ALL] non hanno nomi propri. In teoria, un UNION di due tabelle disgiunte, nessuna delle quali ha righe duplicate in sé dovrebbe essere aggiornabile.

https://www.simple-talk.com/sql/t-sql-programming/sql-view-beyond-the-basics/

CREATE VIEW DepTally2 (emp_nbr, dependent_cnt)
AS (SELECT emp_nbr, COUNT(*)
      FROM Dependents
     GROUP BY emp_nbr)
   UNION
   (SELECT emp_nbr, 0
      FROM Personnel AS P2
     WHERE NOT EXISTS 
          (SELECT *
             FROM Dependents AS D2
            WHERE D2.emp_nbr = P2.emp_nbr));


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow