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

消息 421,级别 16,状态 1,第 1 行文本数据类型不能选择为 DISTINCT,因为它不可比较。

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

我该如何解决这个问题,干杯。

4

2 回答 2

5

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

于 2012-04-05T10:38:50.823 回答
0

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

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

于 2012-04-05T10:46:03.497 回答