Обновляемое представление
Представления могут быть обновляемыми (updatable). В таких представлениях мы можем изменить или удалить строки или добавить в них новые строки.
При создании подобных представлений есть множество ограничений. В частности, команда SELECT при создании обновляемого представления не может содержать:
TOP
DISTINCT
UNION
JOIN
агрегатные функции типа COUNT или MAX
GROUP BY и HAVING
подзапросы
производные столбцы или столбцы, которые вычисляются на основании нескольких значений
обращения одновременно к нескольким таблицам
Стоит отметить, что это касается именно обновляемого представления. Например, для создания обычного представления мы можем использовать в команде SELECT оператор JOIN, однако такое представление не будет обновляемым. При попытке его обновить, мы будем получать ошибку вида "View or function название_представления is not updatable because the modification affects multiple base tables."
Допустим, у нас есть следующая таблица:
1 2 3 4 5 6 7 8 | CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY , ProductName NVARCHAR(30) NOT NULL , Manufacturer NVARCHAR(20) NOT NULL , ProductCount INT DEFAULT 0, Price MONEY NOT NULL ) |
И создадим обновляемое представление:
1 2 3 | CREATE VIEW ProductView AS SELECT ProductName AS Product, Manufacturer, Price FROM Products |
Добавим в него данные:
1 2 3 4 | INSERT INTO ProductView (Product, Manufacturer, Price) VALUES ( 'Nokia 8' , 'HDC Global' , 18000) SELECT * FROM ProductView |
Стоит отметить, что при добавлении фактически будет добавлен объект в таблицу Products, которую использует представление ProductView. И поэтому надо учитывать, что если в этой таблице есть какие-либо столбцы, в которые представление не добавляет данные, но которые не допускают значение NULL или не поддерживают значение по умолчанию, то добавление завершится с ошибкой.
Обновление строки представления:
1 2 | UPDATE ProductView SET Price= 15000 WHERE Product= 'Nokia 8' |
Удаление строки в представлении:
1 2 | DELETE FROM ProductView WHERE Product= 'Nokia 8' |
Обновление и удаление также затрагивают ту таблицу, которую использует представление.