Невозможно использовать столбцы text, ntext или image в таблицах «вставлено» и «удалено» - PullRequest
14 голосов
/ 05 июля 2010

Я получил сообщение об ошибке «Не удается использовать столбцы text, ntext или image в таблицах« вставлено »и« удалено »», поскольку в исходной таблице есть поля ntext, к которым я прикрепил триггер.

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

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

Ответы [ 4 ]

15 голосов
/ 06 августа 2010

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

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

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

Кроме того, ntext очень медленно работает с производительностью, поскольку в строке нет данных.

8 голосов
/ 06 июля 2010

Было найдено хорошее решение:

  1. SELECT FROM INSERTED просто столбец id (это не ntext или изображение и запрос выполняется).
  2. ВЫБРАТЬ из исходной таблицы * с теми же идентификаторами.
  3. При необходимости используйте UPDATED () для INSERTED, чтобы знать, какие столбцы были изменены.
1 голос
/ 23 мая 2012

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

0 голосов
/ 09 марта 2016

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

SELECT textfields
FROM yourtable
WHERE EXISTS (
  SELECT 1
  FROM {inserted/deleted}
  WHERE {inserted/deleted}.PK = {yourtable}.PK
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...