Поделиться через


Использование данных типов 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 в таблицах inserted и deleted, триггеры INSTEAD OF поддерживают их. Хранение данных text, ntext и image в таблицах inserted и deleted отличается от хранения данных в базовых таблицах. Данные text, ntext и image не хранятся в виде отдельной последовательности страниц. Вместо этого они хранятся в виде непрерывной строки данных в пределах каждой строки. Это означает, что не существует текстовых указателей для столбцов text, ntext или image в таблицах inserted и deleted. Функции TEXTPTR и TEXTVALID, а также инструкции READTEXT, UPDATETEXT и WRITETEXT недействительны в отношении столбцов text, ntext или image в таблицах inserted или deleted. Все остальные способы использования столбцов text, ntext или image поддерживаются, в том числе отсылка к ним в списках для выбора, параметры поиска в предложении WHERE, функции SUBSTRING, PATINDEX или CHARINDEX. На операции с данными text, ntext или image в триггерах INSTEAD OF влияет текущее значение параметра SET TEXTSIZE. Это значение может быть определено использованием функции @@TEXTSIZE.

Тип данных text, ntext или image, хранящихся в таблицах inserted и deleted, различается в зависимости от триггерного действия (INSERT, UPDATE или DELETE):

  • В инструкциях INSERT таблица inserted содержит новое значение для столбца text, ntext или image. Таблица deleted не имеет строк.

  • В инструкциях DELETE таблица inserted не имеет строк, а строки таблицы deleted содержат значения, содержавшиеся в столбце text, ntext или image до начала выполнения инструкции DELETE.

  • В инструкциях UPDATE, где значения text, ntext или image не изменяются, строки обеих таблиц (inserted и deleted) содержат одни и те же значения для столбцов text, ntext и image.

  • В инструкциях UPDATE, в которых значения text, ntext или image изменяются, таблица deleted содержит значения данных в том виде, в каком они существовали до начала выполнения инструкции UPDATE, а таблица deleted содержит данные с любыми изменениями, указанными в предложении SET.

Если инструкция INSERT, UPDATE или DELETE изменяет множество строк с большими значениями text, ntext или image, может потребоваться большой объем памяти для хранения копий данных text, ntext или image в таблицах inserted и deleted. Копирование больших объемов данных также может снижать производительность. Инструкции INSERT, UPDATE и DELETE, ссылающиеся на представления или таблицы, которые имеют триггеры INSTEAD OF, должны во всех возможных случаях изменять одну строку за один раз или только несколько строк за один раз.

См. также

Основные понятия