Представления могут быть обновляемыми (updatable). В таких представлениях мы можем изменить или удалить строки или добавить в них новые строки.
При создании подобных представлений есть множество ограничений. В частности, команда SELECT в представлении не может содержать:
- TOP
- DISTINCT
- UNION
- JOIN
- агрегатные функции типа COUNT или MAX
- GROUP BY и HAVING
- подзапросы
- производные столбцы или столбцы, которые вычисляются на основании нескольких значений
- обращения одновременно к нескольким таблицам
Допустим, у нас есть следующая таблица:
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' |
Обновление и удаление также затрагивают ту таблицу, которую использует представление.
Комментариев нет:
Отправить комментарий