Изменение данных в секционированных представлениях

Если секционированное представление не подлежит обновлению, оно может служить лишь копией исходной таблицы, предназначенной только для чтения. Обновляемое секционированное представление обладает всеми возможностями исходной таблицы.

Представление считается обновляемым секционированным, если оно представляет собой набор инструкций SELECT, результаты которых объединяются в один набор инструкцией UNION ALL. Каждая инструкция SELECT ссылается на одну базовую таблицу SQL Server. Эта таблица может быть локальной или связанной таблицей, на которую ссылается полное имя из четырех частей, функция OPENROWSET или функция OPENDATASOURCE (функции OPENROWSET или OPENDATASOURCE, определяющие передаваемый запрос, использовать нельзя).

Кроме того, инструкции, изменяющие данные и ссылающиеся на представление, должны следовать правилам, определенным для инструкций INSERT, UPDATE и DELETE.

ПримечаниеПримечание

Массовый импорт в секционированное представление не поддерживают ни команда bcp, ни инструкции BULK INSERT и INSERT ... SELECT * FROM OPENROWSET(BULK...). Однако можно вставить в секционированное представление несколько строк с помощью инструкции INSERT.

Если секционированное представление распределено по серверам, избегайте использования триггеров и каскадных действий в базовых таблицах. Триггер или каскадное действие могут внести изменения в базовые данные, влияющие на определение представления.

Распределенные секционированные представления могут быть обновлены, если пользователь имеет разрешения CONTROL, ALTER, TAKE OWNERSHIP или VIEW DEFINITION на каждую базовую таблицу представления. Дополнительные сведения см. в разделе Устранение неполадок с видимостью метаданных в распределенных секционированных представлениях.

ПримечаниеПримечание

Изменять данные через распределенные секционированные представления можно, только если установлен выпуск SQL Server 2008 Enterprise или SQL Server 2008 Developer. Но изменять данные через локальные секционированные представления можно в любом выпуске SQL Server 2008.

Инструкции INSERT

Инструкции INSERT добавляют данные в базовые таблицы через секционированное представление. Инструкции INSERT должны следовать следующим правилам.

  • В инструкцию INSERT должны включаться все столбцы, даже если в базовой таблице значением столбца может быть NULL или если для него определено ограничение DEFAULT.

  • Ключевое слово DEFAULT в предложении VALUES инструкции INSERT использовать нельзя.

  • В инструкциях INSERT должны содержаться значения, удовлетворяющие логике ограничения CHECK, определенного для секционированного столбца одной или более базовых таблиц.

  • Инструкции INSERT запрещены, если в одной из базовых таблиц есть столбец удостоверений.

  • Инструкции INSERT запрещены, если одна из базовых таблиц содержит столбец типа timestamp.

  • Инструкции INSERT запрещены, если есть самосоединение с тем же самым представлением или с одной из базовых таблиц.

Инструкции UPDATE

Инструкции UPDATE изменяют данные в одной или более базовых таблицах через секционированное представление. Инструкции UPDATE должны следовать следующим правилам:

  • Ключевое слово DEFAULT в предложении SET инструкции UPDATE использовать нельзя, даже если в соответствующей базовой таблице для данного столбца определено значение DEFAULT.

  • Значение столбца удостоверений не может быть изменено; однако другие столбцы обновлять можно.

  • Значение столбца с ограничением PRIMARY KEY нельзя изменить, если он содержит данные типа text, image или ntext.

  • Инструкции UPDATE запрещены, если в одной из базовых таблиц есть столбец типа timestamp.

  • Инструкции UPDATE запрещены, если есть самосоединение с тем же самым представлением или с одной из базовых таблиц.

Инструкции DELETE

Инструкции DELETE удаляют данные в одной или более базовых таблицах через секционированное представление. Инструкции DELETE запрещены, если есть самосоединение с тем же самым представлением или с одной из базовых таблиц.