2012-04-05 83 views
1
SELECT TOP 5 
    Notices.Id, 
    NoticeLoc.Notices_Id, 
    Loc.Id as Loc_Id, 
    CAST(Notices.Text AS TEXT) as Text, 
    CAST(Notices.Title AS TEXT) as Title, 
    Notices.CDate as RDate 
FROM NoticeLoc 
    JOIN Notices ON NoticeLoc.Notices_Id=Notices.Id JOIN Loc ON NLoc.Loc_Id=Loc.Id WHERE Loc_Id IN (1) 

UNION 

SELECT TOP 5 
    Notices.Id, 
    '', 
    '', 
    CAST(Notices.Text AS TEXT) as Text, 
    CAST(Notices.Title AS TEXT) as Title, 
    Notices.CDate as RDate 
FROM NoticeC 
    JOIN Notices ON NoticeC.Notices_Id=Notices.Id WHERE C_Id=110 AND CDate BETWEEN '10/01/2011' AND '07/14/2025' ORDER BY RDate desc 

我试图使用MSSQL 2个的结果集之间进行联合,但是我收到以下错误:SQL联盟未能

Msg 421, Level 16, State 1, Line 1 The text data type cannot be selected as DISTINCT because it is not comparable.

我必须保持这些领域的文本字段。

我该如何解决这个问题,欢呼声。

+1

你能格式化你的SQL查询吗?没人能读到。 – Cylindric 2012-04-05 10:36:53

+0

为什么你不能使用'VARCHAR(MAX)'而不是'TEXT'有什么原因?你是在铸造他们.. – Seph 2012-04-05 11:06:18

回答

5

UNION本身被解释为使用DISTINCT(可能是因为UNION试图将两个查询固有地网格化为一个DISTINCT列表)。使用UNION ALL。

+0

谢谢你做的伎俩。 :) – bobo2000 2012-04-05 10:40:10

+3

UNION ALL将(可能)更改实际结果集。即返回所有行,甚至重复,而简单的UNION则不行。在MSSQL中有 – 2012-04-05 10:54:40

0

问题是数据的类型(TEXT)。你能够改变表来使用VARCHAR(MAX)吗?或者从联合中删除TEXT字段?或者,也许只是在您的查询中将字段转换为VARCHAR(MAX)?

VARCHAR(MAX)在功能上与文本相同(无限长度,不存储在行中等)。

+0

没有varchar这样的东西,只有nvarchar。这导致与PHP的巨大问题。 – bobo2000 2012-04-05 10:57:09

+0

mmm ....我相当肯定MSSQL中都存在varchar和nvarchar? – 2012-04-05 11:01:57

+0

MSSQL数据类型:http://msdn.microsoft.com/en-us/library/ms187752.aspx – 2012-04-05 11:02:55