Microsoft SQL Server
ANSICHT ERSTELLEN
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));