Представления могут быть обновляемыми (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 ProductViewAS SELECT ProductName AS Product, Manufacturer, PriceFROM 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' |
Обновление и удаление также затрагивают ту таблицу, которую использует представление.
Комментариев нет:
Отправить комментарий