2010-10-05 3 views
0

Im имея две таблицы с атрибутами, как date(datetime),headline(varchar),text(text)UNION ALL, поле TEXT и ORDER BY ошибка

Теперь я хочу, чтобы UNION ALL эти две таблицы и сортировку по DateTime. При этом я получаю сообщение об ошибке:

Only text pointers are allowed in work tables, never text, ntext, or image columns. The query processor produced a query plan that required a text, ntext, or image column in a work table.

Попробовав вперед и назад я узнал, что это текст атрибут, который вызывает ошибку. Но что делать? Я попробовал кастинг в VARCHAR без каких-либо успехов. Обе таблицы используют текстовый формат в текстовом атрибуте.

Также при удалении ORDER BY все работает нормально. Что делать?

Исходный SQL-запрос ниже, но вы можете просто ответить на упрощенное выше.

SELECT  id, datetime, author, headline, intro, text, type, toppriority, 
      secondpriority, comments, companyid, '1' source 
FROM  Table1 
UNION ALL 
SELECT  AutoID AS id, Dato AS datetime, 
      ID COLLATE SQL_Latin1_General_CP1_CI_AS AS author, NULL AS headline, 
      NULL AS intro, Notat COLLATE SQL_Latin1_General_CP1_CI_AS AS text, 
      CAST(NotatTypeID AS VARCHAR) AS type, 
      NULL AS toppriority, NULL AS secondpriority, NULL AS comments, 
      Selskabsnummer AS companyid, '2' source 
FROM  Table2 
WHERE  (NotatTypeID = '5') OR (NotatTypeID = '6') 
ORDER BY datetime DESC 

Заранее спасибо

+1

Какая версия SQL, платформа и т. Д. – Hogan

+0

Я думаю, что ошибка специфична для SQL Server 2000 – MartW

+0

Это SQL Server 2000 – 2010-10-05 10:37:02

ответ

0

Один из способов обойти это запустить объединение как запрос вир и заказать результаты впоследствии:

SELECT * FROM 
(
    SELECT  id, datetime, author, headline, intro, text, TYPE, toppriority, 
      secondpriority, comments, companyid, '1' source 
    FROM  Table1 
    UNION ALL 
    SELECT  AutoID AS id, Dato AS datetime, 
      ID COLLATE SQL_Latin1_General_CP1_CI_AS AS author, NULL AS headline, 
      NULL AS intro, Notat COLLATE SQL_Latin1_General_CP1_CI_AS AS text, 
      CAST(NotatTypeID AS VARCHAR) AS TYPE, 
      NULL AS toppriority, NULL AS secondpriority, NULL AS comments, 
      Selskabsnummer AS companyid, '2' source 
    FROM  Table2 
    WHERE  (NotatTypeID = '5') OR (NotatTypeID = '6') 
) a 
ORDER BY datetime DESC 
0

насчет литья поля даты и времени в какой-то текстовое поле в индексе? Обратите внимание, что использование «datetime» и «text» в качестве имен полей/псевдонимов может быть довольно запутанным и источником потенциальных проблем.