Нельзя использовать столбцы text, ntext или image в таблицах "вставленные" и "удаленные"

У меня возникла ошибка "Невозможно использовать столбцы text, ntext или image в" вставленных "и" удаленных "таблицах", так как в исходной таблице есть текстовые поля, я добавил триггер.

Вот решение: http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html

Но исходный (не измененный) запрос достаточно сложный. Что я должен писать вместо SELECT * FROM INSERTED, используя оператор JOIN, как он рекомендовал?

Ответ 1

Было найдено приятное решение:

  • SELECT FROM INSERTED только столбец id (это не ntext или изображение и запрос выполняется).
  • SELECT из исходной таблицы * с теми же идентификаторами.
  • При необходимости используйте UPDATED() на INSERTED, чтобы знать, какие столбцы были изменены.

Ответ 2

Реальная проблема заключается в том, что вы пытаетесь выбрать столбцы в вставленной таблице, которые имеют тип ntext, текст или изображение. Это не разрешено в триггере.

Реальное решение состояло бы в том, чтобы изменить все ваши ntext, nvarchar (max), текст на varchar (max) и изображение на varbinary (max), как предложено MS.

MS заявляет, что эти типы устарели и будут удалены в будущей версии.

Кроме того, ntext работает медленно, так как нет данных в строке.

Ответ 3

Использование триггеров "INSTEAD OF" может решить проблему, поскольку поля "текст", "текст" и "изображение" доступны в "вставленных" и "удаленных" таблицах. Посмотрите http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=148387, чтобы узнать, как это можно сделать.

Ответ 4

Используйте триггер после вставки на yourtable:

SELECT textfields
FROM yourtable
WHERE EXISTS (
  SELECT 1
  FROM {inserted/deleted}
  WHERE {inserted/deleted}.PK = {yourtable}.PK
)