Zoeken…


CREATE VIEW

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

Rijen uit weergaven kunnen net als tabellen worden geselecteerd:

SELECT FirstName
FROM view_EmployeeInfo

U kunt ook een weergave met een berekende kolom maken. We kunnen de bovenstaande weergave als volgt wijzigen door een berekende kolom toe te voegen:

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

Deze weergave voegt een extra kolom toe die verschijnt wanneer u er rijen uit SELECT . De waarden in deze extra kolom zijn afhankelijk van de velden FirstName en LastName in de tabel Employee en worden automatisch achter de schermen bijgewerkt wanneer die velden worden bijgewerkt.

CREATE VIEW Met codering

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

CREATE VIEW Met 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

Weergaven kunnen joins gebruiken om gegevens uit verschillende bronnen te selecteren, zoals tabellen, tabelfuncties of zelfs andere weergaven. In dit voorbeeld worden de kolommen Voornaam en Achternaam uit de tabel Persoon en de kolom JobTitle uit de tabel Werknemer gebruikt.

Deze weergave kan nu worden gebruikt om alle overeenkomstige rijen voor managers in de database te zien:

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

MAAK geïndexeerde weergave

Als u een weergave met een index wilt maken, moet de weergave worden gemaakt met de trefwoorden WITH SCHEMABINDING :

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

Alle geclusterde of niet-geclusterde indexen kunnen nu worden gemaakt:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Er zijn enkele beperkingen voor geïndexeerde weergaven:

  • De viewdefinitie kan verwijzen naar een of meer tabellen in dezelfde database.

  • Nadat de unieke geclusterde index is gemaakt, kunnen aanvullende niet-geclusterde indexen worden gemaakt voor de weergave.

  • U kunt de gegevens in de onderliggende tabellen bijwerken - inclusief invoegingen, updates, verwijderingen en zelfs afkappingen.

  • U kunt de onderliggende tabellen en kolommen niet wijzigen. De weergave wordt gemaakt met de optie WITH SCHEMABINDING.

  • Het mag COUNT, MIN, MAX, TOP, outer joins of een paar andere trefwoorden of elementen niet bevatten.

Lees dit MSDN-artikel voor meer informatie over het maken van geïndexeerde weergaven

Gegroepeerde UITZICHTEN

Een gegroepeerde VIEW is gebaseerd op een query met een GROUP BY-clausule. Aangezien elk van de groepen meer dan één rij in de basis kan hebben waaruit het is opgebouwd, zijn dit noodzakelijkerwijs alleen-lezen BEELDEN. Dergelijke VIEW's hebben meestal een of meer geaggregeerde functies en worden gebruikt voor rapportagedoeleinden. Ze zijn ook handig voor het omzeilen van zwakke punten in SQL. Overweeg een UITZICHT dat de grootste verkoop in elke staat toont. De vraag is eenvoudig:

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;

UNIE BEELDEN

AANZICHTEN op basis van een UNION of UNION ALL-bewerking zijn alleen-lezen omdat er geen enkele manier is om een wijziging toe te wijzen aan slechts één rij in een van de basistabellen. De operator UNION verwijdert dubbele rijen uit de resultaten. Zowel de operatoren UNION als UNION ALL verbergen welke tabel de rijen vandaan kwamen. Dergelijke VIEWs moeten een gebruiken, omdat de kolommen in een UNION [ALL] geen eigen naam hebben. In theorie zou een UNION van twee onafhankelijke tabellen, die geen dubbele rijen op zich hebben, kunnen worden bijgewerkt.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow