Microsoft SQL Server
СОЗДАТЬ ВИД
Поиск…
СОЗДАТЬ ВИД
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));