Suche…


ANSICHT ERSTELLEN

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

Zeilen aus Ansichten können wie Tabellen ausgewählt werden:

SELECT FirstName
FROM view_EmployeeInfo

Sie können auch eine Ansicht mit einer berechneten Spalte erstellen. Wir können die Ansicht oben wie folgt ändern, indem Sie eine berechnete Spalte hinzufügen:

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

Diese Ansicht fügt eine zusätzliche Spalte hinzu, die SELECT wird, wenn Sie Zeilen daraus SELECT . Die Werte in dieser zusätzlichen Spalte hängen von den Feldern FirstName und LastName in der Tabelle Employee und werden automatisch aktualisiert, wenn diese Felder aktualisiert werden.

VIEW CREATE mit Verschlüsselung

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

ANSICHT ERSTELLEN mit 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

Ansichten können Joins verwenden, um Daten aus zahlreichen Quellen wie Tabellen, Tabellenfunktionen oder sogar anderen Ansichten auszuwählen. In diesem Beispiel werden die Spalten FirstName und LastName aus der Person-Tabelle und die Spalte JobTitle aus der Employee-Tabelle verwendet.

Diese Ansicht kann jetzt verwendet werden, um alle entsprechenden Zeilen für Manager in der Datenbank anzuzeigen:

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

ANZEIGE ERSTELLEN

Um eine Sicht mit einem Index zu erstellen, muss die Sicht mit den Schlüsselwörtern WITH SCHEMABINDING erstellt werden:

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

Jetzt können beliebige gruppierte oder nicht gruppierte Indizes erstellt werden:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Es gibt einige Einschränkungen für indizierte Sichten:

  • Die Sichtdefinition kann auf eine oder mehrere Tabellen in derselben Datenbank verweisen.

  • Nachdem der eindeutige gruppierte Index erstellt wurde, können zusätzliche nicht gruppierte Indizes für die Ansicht erstellt werden.

  • Sie können die Daten in den zugrunde liegenden Tabellen aktualisieren - einschließlich Einfügungen, Aktualisierungen, Löschungen und sogar Abschneiden.

  • Sie können die zugrunde liegenden Tabellen und Spalten nicht ändern. Die Ansicht wird mit der Option WITH SCHEMABINDING erstellt.

  • Es kann nicht COUNT, MIN, MAX, TOP, Outer Joins oder einige andere Schlüsselwörter oder Elemente enthalten.

Weitere Informationen zum Erstellen von indizierten Ansichten finden Sie in diesem MSDN-Artikel

Gruppierte Ansichten

Eine gruppierte Ansicht basiert auf einer Abfrage mit einer GROUP BY-Klausel. Da jede der Gruppen mehr als eine Zeile in der Basis haben kann, aus der sie erstellt wurde, sind diese notwendigerweise schreibgeschützt. Solche VIEWs verfügen normalerweise über eine oder mehrere Aggregatfunktionen und werden zu Berichtszwecken verwendet. Sie sind auch nützlich, um Schwachstellen in SQL zu umgehen. Betrachten Sie eine Ansicht, die den größten Verkauf in jedem Bundesstaat zeigt. Die Abfrage ist einfach:

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;

UNION-ed ANSICHTEN

VIEWs, die auf einer UNION- oder UNION ALL-Operation basieren, sind schreibgeschützt, da es keine Möglichkeit gibt, eine Änderung auf nur eine Zeile in einer der Basistabellen abzubilden. Der UNION-Operator entfernt doppelte Zeilen aus den Ergebnissen. Sowohl die UNION- als auch die UNION ALL-Operatoren verbergen, aus welcher Tabelle die Zeilen stammen. Solche VIEWs müssen ein verwenden, da die Spalten in einer UNION [ALL] keine eigenen Namen haben. Theoretisch sollte eine UNION aus zwei getrennten Tabellen, von denen keine doppelte Zeilen in sich hat, aktualisierbar sein.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow