UNION ALL,TEXT字段和ORDER BY错误

时间:2010-10-05 10:05:47

标签: sql sql-server sql-order-by union union-all

我有两个表格,其中包含date(datetime),headline(varchar),text(text)

等属性

现在我想UNION ALL这两个表并按日期时间排序。这样做时我得到错误:

  

工作表中只允许使用文本指针,而不允许使用text,ntext或image列。查询处理器生成了一个查询计划,该计划需要工作表中的text,ntext或image列。

在来回尝试之后,我发现它是导致错误的文本属性。但该怎么办?我试着没有成功地投射到VARCHAR。两个表都在text属性中使用文本格式。

同样,当删除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 :(得分:0)

这样做的一种方法是将union作为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

答案 1 :(得分:0)

如何将datetime字段转换为索引中的某些文本字段?请注意,使用“datetime”和“text”作为字段/别名可能会非常混乱,并且可能会出现潜在问题。