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 は本質的に 2 つのクエリを 1 つの DISTINCT リストにメッシュ化しようとしているためです)。UNION ALL を使用します。

于 2012-04-05T10:38:50.823 に答える
0

問題は、データのタイプ (TEXT) です。代わりに VARCHAR(MAX) を使用するようにテーブルを変更できますか? またはユニオンから TEXT フィールドを削除しますか? それとも、クエリでフィールドを VARCHAR(MAX) にキャストするだけですか?

VARCHAR(MAX) は、機能的にはテキストと同じです (長さが無制限、行に格納されないなど)。

于 2012-04-05T10:46:03.497 に答える