Если я обновлю представление, обновятся ли мои исходные таблицы - PullRequest
31 голосов
/ 15 апреля 2010

Гипотетически у меня есть две таблицы Employee и Locations. Кроме того, у меня есть представление viewEmpLocation, которое создается путем объединения Employee и Locations.

Если я обновлю представление, обновятся ли данные в исходной таблице?

Ответы [ 3 ]

24 голосов
/ 15 апреля 2010

см. Использование представлений в Microsoft SQL Server

При изменении данных через представление (то есть, используя INSERT или UPDATE заявления) существуют определенные ограничения в зависимости от типа зрения. Просмотры доступ к нескольким таблицам возможен только изменить одну из таблиц в представлении. Представления, которые используют функции, указывают DISTINCT, или используйте GROUP BY пункт не может быть обновлен. Кроме того, вставка данных запрещено для следующих типов просмотров:

* views having columns with derived (i.e., computed) data in the SELECT-list  
* views that do not contain all columns defined as NOT NULL from the tables from which they were defined

Также возможно вставить или обновить данные через представление так, чтобы данные больше не доступны через эта точка зрения, если только с проверкой ОПЦИЯ была указана.

19 голосов
/ 16 апреля 2010

Да.

Данные "в" представлении не существуют независимо от таблиц, составляющих представление. По сути, представление является хранимым оператором SELECT, который маскируется как таблица. Данные хранятся в исходных таблицах и «собираются» только в виде, когда вы хотите на них посмотреть. Если представление обновляется (не все представления), обновления применяются к данным таблицы.

4 голосов
/ 16 апреля 2010

Вы можете использовать триггер в представлении, чтобы вставить / обновить / удалить фактические таблицы.

http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/

...