Использование данных типов 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, должны во всех возможных случаях изменять одну строку за один раз или только несколько строк за один раз.