Szukaj…


UTWÓRZ WIDOK

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

Rzędy z widoków można wybierać podobnie jak tabele:

SELECT FirstName
FROM view_EmployeeInfo

Możesz także utworzyć widok z kolumną obliczeniową. Możemy zmodyfikować powyższy widok w następujący sposób, dodając kolumnę obliczeniową:

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

Pogląd ten dodaje dodatkową kolumnę, która pojawi się po SELECT wiersze z nim. Wartości w tej dodatkowej kolumnie będą zależeć od pól FirstName i LastName w tabeli Employee i będą automatycznie aktualizowane za kulisami, gdy pola te zostaną zaktualizowane.

UTWÓRZ WIDOK Z Szyfrowaniem

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

STWÓRZ WIDOK Z WEJŚCIEM WEWNĘTRZNYM

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

Widoki mogą używać złączeń do wybierania danych z wielu źródeł, takich jak tabele, funkcje tabel, a nawet inne widoki. W tym przykładzie użyto kolumn FirstName i LastName z tabeli Person oraz kolumny JobTitle z tabeli Employee.

Ten widok może teraz służyć do wyświetlania wszystkich odpowiednich wierszy dla menedżerów w bazie danych:

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

UTWÓRZ Zindeksowany WIDOK

Aby utworzyć widok z indeksem, widok należy utworzyć za pomocą słów kluczowych WITH SCHEMABINDING :

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

Można teraz tworzyć dowolne indeksy klastrowe lub nieklastrowane:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Indeksowane widoki mają pewne ograniczenia:

  • Definicja widoku może odwoływać się do jednej lub więcej tabel w tej samej bazie danych.

  • Po utworzeniu unikalnego indeksu klastrowego można utworzyć dodatkowe indeksy nieklastrowane względem widoku.

  • Możesz aktualizować dane w bazowych tabelach - w tym wstawki, aktualizacje, usuwa, a nawet obcina.

  • Nie możesz modyfikować bazowych tabel i kolumn. Widok jest tworzony za pomocą opcji Z SCHEMABINDOWANIEM.

  • Nie może zawierać COUNT, MIN, MAX, TOP, złączeń zewnętrznych ani kilku innych słów kluczowych lub elementów.

Aby uzyskać więcej informacji na temat tworzenia indeksowanych widoków, przeczytaj ten artykuł MSDN

Zgrupowane WIDOKI

Zgrupowany widok jest oparty na zapytaniu z klauzulą GROUP BY. Ponieważ każda z grup może mieć więcej niż jeden wiersz w bazie, z którego została zbudowana, są to koniecznie WIDOKI tylko do odczytu. Takie WIDOKI zwykle mają jedną lub więcej funkcji agregujących i są wykorzystywane do celów sprawozdawczych. Są również przydatne do obejścia słabych stron SQL. Rozważ WIDOK pokazujący największą sprzedaż w każdym stanie. Zapytanie jest proste:

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;

WIDOKI UNII

WIDOKI oparte na operacji UNION lub UNION ALL są tylko do odczytu, ponieważ nie ma jednego sposobu odwzorowania zmiany na tylko jeden wiersz w jednej z tabel podstawowych. Operator UNION usunie zduplikowane wiersze z wyników. Zarówno operatorzy UNION, jak i UNION ALL ukrywają, z której tabeli pochodzą wiersze. WIDOKÓW takich należy używać, ponieważ kolumny w UNII [WSZYSTKO] nie mają własnych nazw. Teoretycznie UNIA dwóch rozłącznych tabel, z których żadna nie ma zduplikowanych wierszy, powinna być aktualizowana.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow