Поиск…


СОЗДАТЬ ВИД

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

Строки из представлений можно выбрать так же, как и таблицы:

SELECT FirstName
FROM view_EmployeeInfo

Вы также можете создать представление с вычисленным столбцом. Мы можем изменить вид сверху следующим образом, добавив вычисляемый столбец:

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

В этом представлении добавляется дополнительный столбец, который будет отображаться при SELECT из него строк. Значения в этом дополнительном столбце будут зависеть от полей FirstName и LastName в таблице Employee и будут автоматически обновляться за кадром при обновлении этих полей.

CREATE VIEW С шифрованием

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

СОЗДАЙТЕ СМОТРЕТЬ С ВНУТРЕННЕМ СОЕДИНЕНИЕМ

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

Представления могут использовать объединения для выбора данных из многочисленных источников, таких как таблицы, табличные функции или даже другие виды. В этом примере используются столбцы FirstName и LastName из таблицы Person и столбца JobTitle из таблицы Employee.

Теперь это представление можно использовать для просмотра всех соответствующих строк для Менеджеров в базе данных:

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

CREATE Indexed VIEW

Чтобы создать представление с индексом, представление должно быть создано с использованием WITH SCHEMABINDING слов WITH SCHEMABINDING :

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

Теперь могут быть созданы любые кластерные или некластеризованные индексы:

CREATE UNIQUE CLUSTERED INDEX IX_view_EmployeeInfo
ON view_EmployeeInfo
(
     EmployeeID ASC
)

Есть некоторые ограничения для индексированных просмотров:

  • Определение представления может ссылаться на одну или несколько таблиц в одной и той же базе данных.

  • После создания уникального кластерного индекса дополнительные дополнительные некластерные индексы могут быть созданы против представления.

  • Вы можете обновлять данные в базовых таблицах, включая вставки, обновления, удаления и даже усечения.

  • Вы не можете изменять базовые таблицы и столбцы. Представление создается с помощью опции СХЕМА СОХРАНЕНИЯ.

  • Он не может содержать COUNT, MIN, MAX, TOP, внешние соединения или несколько других ключевых слов или элементов.

Для получения дополнительной информации о создании индексированных представлений вы можете прочитать эту статью MSDN

Сгруппированные VIEW

Сгруппированный VIEW основан на запросе с предложением GROUP BY. Поскольку каждая из групп может иметь более одной строки в базе, из которой она была построена, это обязательно VIEW-запросы только для чтения. Такие VIEW обычно имеют одну или несколько совокупных функций, и они используются для целей отчетности. Они также удобны для устранения недостатков SQL. Рассмотрим ВИД, который показывает самую большую продажу в каждом штате. Запрос прост:

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 или UNION ALL, доступны только для чтения, потому что нет единого способа сопоставить изменение только одной строке в одной из базовых таблиц. Оператор UNION удалит повторяющиеся строки из результатов. Операторы UNION и UNION ALL скрывают, из какой таблицы были получены строки. Такие VIEW должны использовать a, потому что столбцы в UNION [ALL] не имеют собственных имен. Теоретически, UNION двух непересекающихся таблиц, ни один из которых не имеет повторяющихся строк сам по себе, должен быть обновляемым.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow