2012-04-05 126 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