UNION ALL, поле TEXT и ошибка ORDER BY - PullRequest
0 голосов
/ 05 октября 2010

У меня две таблицы с такими атрибутами, как date(datetime),headline(varchar),text(text)

Теперь я хочу объединить ВСЕ эти две таблицы и отсортировать по дате и времени.При этом я получаю сообщение об ошибке:

В рабочих таблицах допускаются только текстовые указатели, но не столбцы text, ntext или image.Обработчик запросов сгенерировал план запроса, который требовал столбца text, ntext или image в рабочей таблице.

После попыток назад и вперед я обнаружил, что именно текстовый атрибут вызывает ошибку,Но что делать?Я попытался привести к 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

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

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

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

0 голосов
/ 05 октября 2010

Один из способов - запустить объединение как запрос sup и затем упорядочить результаты:

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
...