SQL联盟失败

时间:2012-04-05 10:35:32

标签: sql sql-server

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个结果集之间执行联合,但是我收到以下错误:

  

消息421,级别16,状态1,行1文本数据类型不能   被选为DISTINCT,因为它不具有可比性。

我必须将这些字段保留为文本字段。

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

2 个答案:

答案 0 :(得分:5)

UNION本身被解释为使用DISTINCT(可能是因为UNION试图将这两个查询固有地嵌入到一个DISTINCT列表中)。使用UNION ALL。

答案 1 :(得分:0)

问题是数据的类型(TEXT)。您是否可以将表更改为使用VARCHAR(MAX)?或者从联合中删除TEXT字段?或者也许只是在查询中将字段转换为VARCHAR(MAX)?

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