Использование данных типов text, ntext и image в триггерах INSTEAD OF
Изменения данных могут производиться в отношении столбцов text, ntext и image. В базовых таблицах значение, хранящееся в столбце text, ntext или image, является текстовым указателем страниц, содержащих данные. Дополнительные сведения см. в разделе Данные в строке.
Примечание. |
---|
Использование данных text, ntext и image доступно только для обеспечения обратной совместимости. Предпочтительным способом хранения для данных большого объема является использование типов данных varchar(max), nvarchar(max) и varbinary(max). Оба триггера, AFTER и INSTEAD OF, поддерживают использование данных varchar(max), nvarchar(max) и varbinary(max) во вставляемых и удаляемых таблицах. |
Хотя триггеры AFTER не поддерживают данные типов text, ntext или image во вставляемых и удаляемых таблицах, триггеры INSTEAD OF поддерживают их. Хранение данных text, ntext и image во вставляемых и удаляемых таблицах отличается от хранения данных в базовых таблицах. Данные text, ntext и image не хранятся в виде отдельной последовательности страниц. Вместо этого они хранятся в виде непрерывной строки данных в пределах каждой строки. Это означает, что не существует текстовых указателей для столбцов text, ntext или image во вставляемых и удаляемых таблицах. Функции TEXTPTR и TEXTVALID, а также инструкции READTEXT, UPDATETEXT и WRITETEXT недействительны в отношении столбцов text, ntext или image из вставляемых или удаляемых таблиц. Все остальные способы использования столбцов text, ntext или image поддерживаются, в том числе отсылка к ним в списках для выбора, параметры поиска в предложении WHERE, функции SUBSTRING, PATINDEX или CHARINDEX. На операции с данными text, ntext или image в триггерах INSTEAD OF влияет текущее значение параметра SET TEXTSIZE. Это значение может быть определено использованием функции @@TEXTSIZE.
Тип данных text, ntext или image, хранящихся во вставляемых и удаляемых таблицах, различается в зависимости от триггерного действия (INSERT, UPDATE или DELETE):
- В инструкциях INSERT вставляемая таблица содержит новое значение для столбца text, ntext или image. Удаляемая таблица не имеет строк.
- В инструкциях DELETE вставляемая таблица не имеет строк, а строки удаляемой таблицы содержат значения, содержавшиеся в столбце text, ntext или image до начала выполнения инструкции DELETE.
- В инструкциях UPDATE, где значения text, ntext или image не изменяются, строки обеих таблиц (вставляемой и удаляемой) содержат одни и те же значения для столбца text, ntext или image.
- В инструкциях UPDATE, в которых значения text, ntext или image изменяются, удаляемая таблица содержит значения данных в том виде, в каком они существовали до начала выполнения инструкции UPDATE, а вставляемая таблица содержит данные с любыми изменениями, указанными в предложении SET.
Если инструкция INSERT, UPDATE или DELETE изменяет множество строк с большими значениями text, ntext или image, может потребоваться большой объем памяти для хранения копий данных text, ntext или image во вставляемой и удаляемой таблицах. Копирование больших объемов данных также может снижать производительность. Инструкции INSERT, UPDATE и DELETE, ссылающиеся на представления или таблицы, которые имеют триггеры INSTEAD OF, должны во всех возможных случаях изменять одну строку за один раз или только несколько строк за один раз.
См. также
Основные понятия
Применение триггеров INSTEAD OF