Нельзя использовать столбцы 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
)